0

我有这个字符串:

whatever [that's the pattern] by [pattern again] before [whatever].

我很想把括号[]和它们里面的所有东西都包裹在一个跨度中,就像:

whatever <span>[that's the pattern]</span> by </span>[pattern again]</span>
before <span>[whatever]</span>.

我试过了

re = new RegExp(/\[(.*)\]/);
var newString =  oldString.replace(re, "<span>$1</span>");

但这会返回:

whatever <span>[that's the pattern] by [pattern again] before [whatever]</span>.

在有人告诉我为什么我不应该使用正则表达式来解析 HTML之前,我这样做的原因是因为这个字符串在网页上回显,括号和其中的文本有不同的颜色。我需要将它们包装在一个跨度中以便能够设置它们的样式。如果有更好的解决方案,我很开放。

非常感谢!

4

2 回答 2

2

除了设置全局标志之外,您还需要使您的正则表达式变得惰性:

var newString = oldString.replace(/\[(.*?)\]/g, "<span>[$1]</span>")
                                        ^    ^
于 2013-06-03T17:34:45.823 回答
1

您需要设置全局标志,告诉它匹配不止一次:

oldString.replace(/\[(.*)\]/g, ...)
于 2013-06-03T17:33:44.850 回答