JavaScript正则表达式 - 如何用标签包装匹配?

Hym*_*tor 7 javascript regex

我在JavaScript中有一个字符串,我想在其中找到给定短语的所有匹配项并用标记包装它们.我无法在这里找到正确的正则表达式方法来替换不区分大小写的短语,并用它周围的附加文本替换它自己.例如:

输入字符串:

"I like to play with cats, as does Cathy, who is a member of ACATA, which is the American Cat And Tiger Association."
Run Code Online (Sandbox Code Playgroud)

不区分大小写的短语:"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."
Run Code Online (Sandbox Code Playgroud)

所以,基本上,注入<em></em>任何比赛.我不能只做一个直接替换,因为我将丢失输入字符串中的原始情况.

Jos*_*ier 7

你可以使用:

"Foo bar cat".replace(/(cat)/ig, "<em>$1</em>");
Run Code Online (Sandbox Code Playgroud)

哪个将返回:

"Foo bar <em>cat</em>"
Run Code Online (Sandbox Code Playgroud)

  • 完美,在花了15分钟阅读其他帖子之后,我终于找到了我一直在寻找的东西! (2认同)

lxe*_*lxe 5

您可以使用替换功能进行直接替换:

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

  • 您可以利用 `&lt;em&gt;$1&lt;/em&gt;` 作为替换字符串,而不是使用函数。 (2认同)

Wik*_*żew 5

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

"Foo bar cat".replace(/cat/ig, "<em>$&</em>");
                                    ^^
Run Code Online (Sandbox Code Playgroud)

请参阅指定字符串作为参数部分:

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

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