Javascript 大写每个单词的第一个字母忽略缩写
Javascript Capitalize first letter of each word ignore Contractions
我正在尝试将字符串中每个单词的首字母大写。我在网上发现了类似的问题,但 none 似乎回答了我忽略像 can't、won't、wasn't 这样的缩略语的问题。
这段代码有效,但它也将缩写中撇号后面的字母大写。
var str = str.replace(/\b\w/g, w => w.toUpperCase())
如果字符串包含 can't 或 won't 之类的缩写,它将输出 Can'T 或 Won'T。
有没有办法忽略单词中间的撇号?我仍然想将被其他标点符号分隔的单词大写。例如:
- this_is_an_example -> This_Is_An_Example
- this/is/an/example -> This/Is/An/Example
- 这是一个例子 -> 这是一个例子
您可以使用
const texts = ["this_can't_be_an_example", 'this/is/an/example', 'this,is,an,example']
for (const text of texts) {
console.log(text, '=>', text.replace(/([\W_]|^)(\w)(?<!\w'\w)/g, (_, x,y) => `${x}${y.toUpperCase()}` ))
}
参见regex demo。 详情:
([\W_]|^)
- 第 1 组 (x
):一个 non-alphanumeric 字符或字符串开头
(\w)
- 第 2 组 (y
):单词 char
(?<!\w'\w)
- 负向回顾,确保第 2 组值前面没有字符字符和 '
.
您可以使用 negative lookbehind 来确保单词边界前没有撇号。
(?:\b|(?<=_))
检查单词前的单词边界或下划线。
const examples = [
"can't",
"this-is-an-example",
"this.is.an.example",
"this/is/an/example",
"this_is_an_example",
"this,is,an,example",
];
examples.forEach(example => {
console.log(example.replace(/(?<!')(?:\b|(?<=_))\w/g, w => w.toUpperCase()));
});
此 RegExp 检测
- 第一个符号
- 下划线
- Space
/
符号
- 逗号
- 撇号
只需在列表中使用 |
分隔符
添加需要的符号
str.replace(/((^|_| |\/|,|')\w)/g, w => w.toUpperCase());
我正在尝试将字符串中每个单词的首字母大写。我在网上发现了类似的问题,但 none 似乎回答了我忽略像 can't、won't、wasn't 这样的缩略语的问题。
这段代码有效,但它也将缩写中撇号后面的字母大写。
var str = str.replace(/\b\w/g, w => w.toUpperCase())
如果字符串包含 can't 或 won't 之类的缩写,它将输出 Can'T 或 Won'T。
有没有办法忽略单词中间的撇号?我仍然想将被其他标点符号分隔的单词大写。例如:
- this_is_an_example -> This_Is_An_Example
- this/is/an/example -> This/Is/An/Example
- 这是一个例子 -> 这是一个例子
您可以使用
const texts = ["this_can't_be_an_example", 'this/is/an/example', 'this,is,an,example']
for (const text of texts) {
console.log(text, '=>', text.replace(/([\W_]|^)(\w)(?<!\w'\w)/g, (_, x,y) => `${x}${y.toUpperCase()}` ))
}
参见regex demo。 详情:
([\W_]|^)
- 第 1 组 (x
):一个 non-alphanumeric 字符或字符串开头(\w)
- 第 2 组 (y
):单词 char(?<!\w'\w)
- 负向回顾,确保第 2 组值前面没有字符字符和'
.
您可以使用 negative lookbehind 来确保单词边界前没有撇号。
(?:\b|(?<=_))
检查单词前的单词边界或下划线。
const examples = [
"can't",
"this-is-an-example",
"this.is.an.example",
"this/is/an/example",
"this_is_an_example",
"this,is,an,example",
];
examples.forEach(example => {
console.log(example.replace(/(?<!')(?:\b|(?<=_))\w/g, w => w.toUpperCase()));
});
此 RegExp 检测
- 第一个符号
- 下划线
- Space
/
符号- 逗号
- 撇号
只需在列表中使用 |
分隔符
str.replace(/((^|_| |\/|,|')\w)/g, w => w.toUpperCase());