带有捕获括号的JavaScript正则表达式

时间:2011-04-30 22:50:16

标签: javascript regex

我有这一段:

<p>FIRST SECOND THIRD</p>

我希望将第二个单词包装在SPAN中,如下所示:

<p>FIRST <span>SECOND</span> THIRD</p>

如果我这样做:

text.replace(/\s(\w+)\s/, '<span>$1</span>');

单词前后的空格字符消失。为什么?我究竟做错了什么?我以为/\s(\w+)\s/抓住了这个词而不是空格。

请参见此处: http://jsfiddle.net/simevidas/TpTzV/

3 个答案:

答案 0 :(得分:3)

这些空间被剥夺了,因为它们是整场比赛的一部分。捕获是它记住通过反向引用替换回替换字符串的内容。

如果JavaScript支持前瞻和后瞻断言,你可以这样做:

text.replace(/(?<\s)(\w+)(?=\s)/, '<span>$1</span>');

但它没有,所以你可以尝试捕捉空间(与你正在包装的单词分开)并将它们放回去:

text.replace(/(\s)(\w+)(\s)/, '$1<span>$2</span>$3');

答案 1 :(得分:1)

$ 1将是您用括号括起的位捕获的部分,即\ w +,它将包含单词字符而不是空格。如果您也想捕获空格,请执行以下操作:

/(\s\w+\s)/

答案 2 :(得分:1)

空格消失,因为没有分组。

尝试:

replace(/(\s\w+\s)/

分组内的空格(\s)。