代码之家  ›  专栏  ›  技术社区  ›  Mike Christensen

Javascript:用<b>标记突出显示字符串的一部分

  •  5
  • Mike Christensen  · 技术社区  · 15 年前

    我试图通过插入 <b>

    "I have a cat."
    

    应该变成:

    "I have a <b>cat</b>."
    

    同样,如果查询为“堆栈溢出”,则:

    "Stack Overflow is great."
    

    "<b>Stack Overflow</b> is great."
    

    换句话说,我必须保留原始字符串的大小写,但在匹配时不区分大小写。

    到目前为止我一直在尝试的一件事是:

    var regex = new RegExp('(' + query + ')', 'i');
    return strResult.replace(regex, '<b>$1</b>');
    

    但是,如果查询中有任何括号,则会导致运行时异常,我认为尝试转义所有可能的正则表达式字符会太麻烦。

    3 回复  |  直到 15 年前
        1
  •  3
  •   Community Mohan Dere    9 年前

    请参见“ Escape Regular Expression Characters in String - JavaScript 有关如何转义特殊正则表达式字符的信息,如 ()

    this 老那么问一个问题 非常 类似的-几乎完全相同的-问题。

        2
  •  3
  •   Community Mohan Dere    9 年前

    不要使用regex来操纵HTML。

    例如,如果查询是cat,则:

    I have a <em class="category">dog</em>
    

    会变成一堆乱七八糟的标记。在查询和文本可能由用户生成的情况下,由此产生的HTML注入攻击可能会给您留下跨站点脚本安全漏洞。

    看到了吗 this question

    (为了完整起见,这里有一个函数来转义regex特殊字符,因为snipplr链接的版本不够。它无法逃脱 ^ $ - 这在角色组中很特别。)

    RegExp.escape= function(s) {
        return s.replace(/[-/\\^$*+?.()|[\]{}]/g, '\\$&')
    };