我有这一段:
<p>FIRST SECOND THIRD</p>
我希望将第二个单词包装在SPAN中,如下所示:
<p>FIRST <span>SECOND</span> THIRD</p>
如果我这样做:
text.replace(/\s(\w+)\s/, '<span>$1</span>');
单词前后的空格字符消失。为什么?我究竟做错了什么?我以为/\s(\w+)\s/
抓住了这个词而不是空格。
答案 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
)。