使用给定的搜索词改进RegEx以突出显示页面上的文本

时间:2015-04-23 14:19:31

标签: javascript regex backbone.js

我在这里有一些工作代码突出显示给定搜索词的完全匹配。

highlight: function(html, search) {
        $.each(search.split(' '), function(idx, word) {
            if (word != '') {
                html = html.replace(new RegExp(word, 'gi'), '<mark>' + word + '</mark>')
            }
        });
        return html;
}

我想突出显示&#34;不到完全匹配&#34;同样。

例如:&#34; 9375551234&#34;应突出显示&#34;(937)555-1234&#34;
         或:&#34; oneil&#34;应该突出显示&#34; O&#39; neil&#34;

注意:我正在用&#39;字替换匹配&#39;而不是匹配的内容。解决方案应该放在&#39;&#39;围绕原始内容。

提前感谢您的时间!

1 个答案:

答案 0 :(得分:1)

您可以修改搜索词以接受其之后或之前的任何特殊字符

word = "9375551234"
regex_word = ""
for(var i = 0; i < word.length; i++) {
 regex_word += '[^\\w]*' + word[i];
};

"(937) 555-1234".replace(new RegExp(regex_word, 'gi'), 's'); // 's'

并为此:

word = "oneil"
regex_word = ""
for(var i = 0; i < word.length; i++) {
  regex_word += '[^\\w]*' + word[i];
};
new RegExp(regex_word, 'gi')
s = "O'ne-il".replace(new RegExp(regex_word, 'gi'), 's'); // 's'

所以你会

highlight: function(html, search) {
    $.each(search.split(' '), function(idx, word) {
        if (word != '') {
          regex_word = ""
          for(var i = 0; i < word.length; i++) {
             regex_word += '[^\\w]*' + word[i];
          };

            html = html.replace(new RegExp(regex_word, 'gi'), '<mark>' + word + '</mark>')
        }
    });
    return html;
}