【问题标题】:JavaScript regex - How to wrap matches with tag?JavaScript regex - 如何用标签包装匹配项?
【发布时间】:2015-04-13 23:53:49
【问题描述】:

我在 JavaScript 中有一个字符串,我想在其中找到给定短语的所有匹配项,并用标签将它们包装起来。我无法在此处找到正确的正则表达式方法来替换不区分大小写的短语并将其替换为自身,并在其周围添加其他文本。例如:

输入字符串:

"I like to play with cats, as does Cathy, who is a member of ACATA, which is the American Cat And Tiger Association."

不区分大小写的短语:“cat”

输出字符串:

"I like to play with <em>cat</em>s, as does <em>Cat</em>hy, who is a member of A<em>CAT</em>A, which is the American <em>Cat</em> And Tiger Association."

所以,基本上,在任何匹配项周围注入&lt;em&gt;&lt;/em&gt;。我不能直接替换,因为我会丢失输入字符串中的原始大小写。

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

    你可以使用:

    "Foo bar cat".replace(/(cat)/ig, "<em>$1</em>");
    

    哪个会返回:

    "Foo bar <em>cat</em>"
    

    【讨论】:

    • 完美,在花了 15 分钟阅读其他帖子后,我终于找到了我一直在寻找的东西!
    【解决方案2】:

    您可以使用replace function 直接替换:

    str.replace(/cat/ig, function replace(match) { 
        return '<em>' + match + '</em>'; 
    });
    

    【讨论】:

    • 您可以利用&lt;em&gt;$1&lt;/em&gt; 作为替换字符串,而不是使用函数。
    【解决方案3】:

    不需要整个正则表达式周围的捕获组,因为有一个 $&amp; 占位符引用字符串替换模式中的整个匹配:

    "Foo bar cat".replace(/cat/ig, "<em>$&</em>");
                                        ^^
    

    请参阅Specifying a string as a parameter 部分:

    $&amp;    插入匹配的子字符串。

    因此,不需要任何回调方法或多余的正则表达式结构。

    【讨论】:

      【解决方案4】:

      您可以很简单地解决它,只需将capturing group 与您想要的word 一起使用,然后使用替换字符串&lt;em&gt;$1&lt;/em&gt;。您可以使用这样的正则表达式:

      (cat)
      

      working demo

      在下面,您可以看到绿色匹配项(不敏感地捕获单词cat),在substitution section 中您可以看到替换项。

      您可以使用此代码:

      var re = /(cat)/ig; 
      var str = '"I like to play with cats, as does Cathy, who is a member of ACATA, which is the American Cat And Tiger Association."\n';
      var subst = '<em>$1</em>'; 
      
      var result = str.replace(re, subst);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-12-16
        • 2022-06-11
        • 1970-01-01
        • 1970-01-01
        • 2015-01-22
        相关资源
        最近更新 更多