JavaScript regex - 如何用标签包装匹配项?

IT技术 javascript regex
2021-02-19 21:13:39

我在 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."

所以,基本上,注入<em></em>任何匹配。我不能直接进行替换,因为我会丢失输入字符串中的原始大小写。

4个回答

你可以使用:

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

哪个将返回:

"Foo bar <em>cat</em>"
完美,在花了 15 分钟阅读其他帖子后,我终于找到了我一直在寻找的东西!
2021-04-17 21:13:39

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

str.replace(/cat/ig, function replace(match) { 
    return '<em>' + match + '</em>'; 
});
您可以利用<em>$1</em>作为替换字符串而不是具有函数。
2021-04-22 21:13:39

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

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

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

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

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

你可以解决这个问题很简单,只需使用一个capturing groupword你想要的,然后用替换字符串<em>$1</em>您可以使用这样的正则表达式:

(cat)

工作演示

在下面,您可以在绿色中看到匹配项(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);