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的可能副本我一开始以为这是有效的,但后来我注意到它不适用于非英语字符。看看这个,你知道我怎么能抓住并利用这些吗?非常感谢。