Javascript 大写每个单词的第一个字母\b\w也适用于I';M

Javascript 大写每个单词的第一个字母\b\w也适用于I';M,javascript,regex,Javascript,Regex,需要大写句子中每个单词的第一个字母,但是我的正则表达式也在大写I'm中的'm' 完整的表述是: /(?:^\w|[A-Z]|\b\w)/g 这里的问题(我认为)是\b\w会抓住单词边界后的第一个字母。我假设单引号表示单词边界,因此也将I的m大写为I 有人能帮我修改表达式,排除单引号后面的'm'吗 谢谢。 找到一个真正的词在语言中的断裂可能有点多。 比使用正则词边界更复杂 ( \s* [\W_]* ) # (1), Not letters/numbers, ( [^\W_

需要大写句子中每个单词的第一个字母,但是我的正则表达式也在大写I'm中的'm'

完整的表述是:

/(?:^\w|[A-Z]|\b\w)/g
这里的问题(我认为)是
\b\w
会抓住单词边界后的第一个字母。我假设单引号表示单词边界,因此也将
I
m
大写为
I

有人能帮我修改表达式,排除单引号后面的'm'吗


谢谢。

找到一个真正的词在语言中的断裂可能有点多。 比使用正则词边界更复杂

 ( \s* [\W_]* )           # (1), Not letters/numbers,
 ( [^\W_] )               # (2), Followed by letter/number
 (                        # (3 start)
      (?:                      # -----------
           \w                       # Letter/number or _
        |                         # or,
           [[:punct:]_-]            # Punctuation
           (?= [\w[:punct:]-] )     #  if followed by punctuation/letter/number or '-'
        |                         #or,
           [?.!]                    # (Add) Special word ending punctuation
      )*                       # ----------- 0 to many times
 )                        # (3 end)
var str='This'是输入_str,ng,End';
console.log(str);

console.log(str.replace(/(\s*[\W_]*)([^\W_])((?:\W|[:putch:][:putch:][-])|[?!]*)/g,函数(match,p1,p2,p3){return p1+p2.toupercase()+p3;}
是JavaScript吗?试试
.replace(/('\W)\b\W/g,函数($0,$1)$1:$toupercase:$0})
@WiktorStribiżew是的,先生!你为什么要用regex来做这件事?@WiktorStribiżew谢谢你Wiktor它能工作!@cricketż007我认为regex是最有效和“漂亮”的解决方案,尽管我可能是错的,你有什么建议吗?Unicode版本
\s*([^\pL\pN]*[\pL\pN-]。(?:[\pL\pN\u-])\ pP=[\pL\pN-]))!!”