对于我正在处理的快速“搜索和突出显示”脚本有一个小问题。我使用正则表达式是因为我想在文档加载后在客户端执行全部搜索。我的搜索/加亮功能是这样的:Javascript正则表达式
function highlight(word, colour, container) {
var regex = new RegExp("(>[^<]*?)(" + word + ")", "ig");
var replace = "$1<span name='searchTerm' style='background-color: " + colour + "'>$2</span>";
if (regex.exec(container.innerHTML)) {
container.innerHTML = container.innerHTML.replace(regex, replace);
return true;
}
return false;
}
word
是搜索这个词,colour
是颜色突出显示,container
在搜索元素
考虑包含这个元素。 :
<ul>
<li>Set the setting to the correct setting.</li>
</ul>
说我把单词“set”传递给了高亮功能。在目前的状态下,由于惰性重排,它只能找到第一个实例。
那么,如果我改变了正则表达式是:
var regex = new RegExp("(>[^<]*?)?(" + word + ")", "ig");
这就是现在的伟大工程,它强调的字符串“集合”的所有实例。但是,如果我传递搜索词“li”,那么它将替换标签内的文本!
有没有这个正则表达式的快速解决方案来获得我想要的行为?我需要它来替换搜索字符串的所有实例,但不会将其作为标记的一部分。我想使用正则表达式保持客户端。
谢谢!
我相信这是相关的:http://stackoverflow.com/questions/1732348/regex-match-open-tags- except-xhtml-self-contained-tags/1732454#1732454 :) – takteek 2010-09-03 02:42:10
我做了类似[jQuery插件](http://alexanderdickson.com/projects/jquery-plugins/searchtermshighlight/)。随意从[源代码](http://alexanderdickson.com/projects/jquery-plugins/searchtermshighlight/jquery.searchtermshighlight.js)获取创意。 – alex 2010-09-03 02:44:11