将每个单词的第一个字母大写,\ b \ w也适用于I&#m; m

时间:2017-04-23 20:14:12

标签: javascript regex

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

完整的表达方式是:

/(?:^\w|[A-Z]|\b\w)/g

这里的问题(我认为)是\b\w将抓住单词边界后的第一个字母。我假设单引号表示单词边界,因此也将m的{​​{1}}大写为I'm

任何人都可以帮我改变表达方式以排除' m'单引号后?

提前致谢。

1 个答案:

答案 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;}));