2010-09-03 99 views
0

对于我正在处理的快速“搜索和突出显示”脚本有一个小问题。我使用正则表达式是因为我想在文档加载后在客户端执行全部搜索。我的搜索/加亮功能是这样的: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”,那么它将替换标签内的文本!

有没有这个正则表达式的快速解决方案来获得我想要的行为?我需要它来替换搜索字符串的所有实例,但不会将其作为标记的一部分。我想使用正则表达式保持客户端。

谢谢!

+0

我相信这是相关的:http://stackoverflow.com/questions/1732348/regex-match-open-tags- except-xhtml-self-contained-tags/1732454#1732454 :) – takteek 2010-09-03 02:42:10

+1

我做了类似[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

回答