Javascript 正则表达式符号后的非转换字符为大写
我正在尝试将一系列句子转换为标题格。但问题是,使用此正则表达式,如果字符以符号开头,则不会转换字符。我怎样才能让它工作 这是一个简单的例子:Javascript 正则表达式符号后的非转换字符为大写,javascript,regex,Javascript,Regex,我正在尝试将一系列句子转换为标题格。但问题是,使用此正则表达式,如果字符以符号开头,则不会转换字符。我怎样才能让它工作 这是一个简单的例子: var ls = ["this is fine" "+this is not"] var response = ls.map(s => s.toLowerCase().replace(/^(.)|[^\w-'](\w)/gi, match => match.toUpperCase())) 我希望响应是[“这很好”+这不是“],而不是像现在这样
var ls = ["this is fine" "+this is not"]
var response = ls.map(s => s.toLowerCase().replace(/^(.)|[^\w-'](\w)/gi, match => match.toUpperCase()))
我希望响应是[“这很好”+这不是“]
,而不是像现在这样[“这很好”+这不是“]
换句话说,问题是+这个没有大写。如果我添加“[这是一个字符串]”
或任何其他符号,情况也是如此
有什么想法吗?你可以试试这个
^\W?\w|\W\w
解释
^
-锚定到字符串的开头
\W?\W
-匹配任何非单词字符。(?使其成为可选的)。后跟任何单词字符
|
-交替的工作原理与逻辑OR相同
\W\W
-匹配任何后跟单词字符的非单词字符
var ls=[“这很好”,“这不是”]
var response=ls.map(s=>
s、 toLowerCase()。替换(/^\W?\W |\W\W/g,
match=>match.toUpperCase())
控制台日志(响应)代码>您可以匹配字符串开头的单词字符,也可以不匹配单词字符,然后再匹配单词字符:
^\w |\w(\w)
var ls=[“这很好”,“这不是”];
var response=ls.map(s=>s.toLowerCase().replace(/^\w |\w(\w)/g,match=>match.toUpperCase())
控制台日志(响应)代码>您可以使用,它匹配任何单词边界
然后正则表达式变为:
\b\w
i、 e.“匹配单词边界后的任何单词字符。”
在行动中看到它:
var ls=[“这很好”,“这不是”];
var result=ls.map(s=>s.toLowerCase().replace(/\b\w/gi,match=>match.toUpperCase());
控制台日志(结果)
我知道您希望匹配单词开头的字母,而不是前面有-
或'
因此,您可以使用
var ls=[“这很好”,“这不是”,“这里的战士”,“我不是”]
var response=ls.map(s=>s.toLowerCase().replace(/(^ |[^-'))\b([a-z])/g,
({g1,g2)=>`${g1}${g2.toUpperCase()}`)
控制台日志(响应)代码>这捕获了+
,否?@Fubert是的,但它不会影响答案。作为+
。Hi@aurélien gasser的可能副本我一开始以为这是有效的,但后来我注意到它不适用于非英语字符。看看这个,你知道我怎么能抓住并利用这些吗?非常感谢。