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

标签 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;
}

我也想强调“不完全匹配”。

例如:“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 = "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;
}

关于javascript - 使用给定的搜索词改进 RegEx 以突出显示页面上的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29826226/

相关文章:

ruby - 如何在 Ruby 中将 URL 分成两部分?

backbone.js - 我应该使用 Backbone 和客户端模板(例如 Mustache)吗?

javascript - 如果元素开始隐藏,css 过渡不起作用

javascript - 在没有 PHP 的情况下将 JS 数组传递到另一个页面

正则表达式最大长度限制

javascript - BackboneJS HelloWorld 不工作

javascript - Backbone.js 回退中哈希后的斜线 - 历史 pushState

javascript - 下划线或lazy.js 映射 (0,1,2,3,4) + (1,2,3,4,5) ->(1,3,5,7,9)

javascript - 位置 href 返回为未定义

: 6 digits or 0-6 signs (digits or stars) with at least one star 的正则表达式