RegExp通配符不应该覆盖

时间:2011-10-11 16:53:36

标签: javascript regex replace wildcard

我在StackOverflow上找到了一个有用的帖子,我在网站上使用 hightlight 特定文字:Link to Answer

我会再次发布(修改):

function hiliter(word) {
    var rgxp = new RegExp(word, 'g');
    var repl = '<span class="highlight">' + word + '</span>';
content.innerHTML = content.innerHTML.replace(rgxp, repl);
}

现在我尝试使用此功能<> 之间找到

hiliter('&lt;(.*)&gt;');

这会找到我要高亮显示的正确部分,但输出更改,例如页面上 <Example><(.*)>

如何使用此通配符进行搜索,但在替换时保留通配符搜索中的html?

提前致谢!

1 个答案:

答案 0 :(得分:3)

您可以将功能传递给.replace [MDN]

function hiliter(word) {
    var rgxp = new RegExp(word, 'g');
    content.innerHTML = content.innerHTML.replace(rgxp, function(match, word) {
         return '<span class="highlight">' + match + '</span>';
    });
}

word将包含第一个捕获组的内容,即.*匹配的内容,match将包含整个匹配,即包含&lt;&gt;

一般说明:如果使用innerHTML,则会销毁并创建所有HTML元素。通过JavaScript绑定的事件处理程序将被销毁。