Javascript 改进正则表达式以使用给定搜索词突出显示页面上的文本

Javascript 改进正则表达式以使用给定搜索词突出显示页面上的文本,javascript,regex,backbone.js,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>')

我这里有一些工作代码,突出显示了给定搜索词的精确匹配

highlight: function(html, search) {
        $.each(search.split(' '), function(idx, word) {
            if (word != '') {
                html = html.replace(new RegExp(word, 'gi'), '<mark>' + word + '</mark>')
            }
        });
        return html;
}
突出显示:函数(html、搜索){ $.each(search.split(“”),函数(idx,word){ 如果(字!=''){ html=html.replace(新的RegExp(单词'gi'),''+word+'') } }); 返回html; } 我还想强调“不完全匹配”

例如:“9375551234”应突出显示“(937)555-1234”
或:“oneil”应突出显示“O'neil”

注意:我将用“word”替换匹配项,而不是匹配的内容。解决方案应在原始内容周围放置“”


提前感谢您抽出时间

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

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=“9375551234”
regex_word=“”
for(变量i=0;i
对于这个:

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'
word=“oneil”
regex_word=“”
for(变量i=0;i
所以对你来说

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;
}
突出显示:函数(html、搜索){ $.each(search.split(“”),函数(idx,word){ 如果(字!=''){ regex_word=“” for(变量i=0;i搜索“fuzzy regex javascript”会得到很多有用的结果。你也可以试一试