需要将句子中每个单词的第一个字母大写,但我的正则表达式也是大写“m'在我的。
完整的表达方式是:
/(?:^\w|[A-Z]|\b\w)/g
这里的问题(我认为)是\b\w
将抓住单词边界后的第一个字母。我假设单引号表示单词边界,因此也将m
的{{1}}大写为I'm
。
任何人都可以帮我改变表达方式以排除' m'单引号后?
提前致谢。
答案 0 :(得分:2)
在语言中间找到一个真正的单词中断可能会多一点 比使用正则表达式边界更复杂。
( \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 "is the ,input _str,ng, the End ';
console.log(str);
console.log(str.replace(/(\s*[\W_]*)([^\W_])((?:\w|[[:punct:]_-](?=[\w[:punct:]-])|[?.!])*)/g, function( match, p1,p2,p3) {return p1 + p2.toUpperCase() + p3;}));