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

JavaScript正则表达式-如何使用标记包装匹配项?,javascript,regex,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." "I like to play with &

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

输入字符串:

"I like to play with cats, as does Cathy, who is a member of ACATA, which is the American Cat And Tiger Association."
"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."
不区分大小写的短语:“cat”

输出字符串:

"I like to play with cats, as does Cathy, who is a member of ACATA, which is the American Cat And Tiger Association."
"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."
“我喜欢和猫一起玩,凯西也是,她是美国猫虎协会的成员。”

因此,基本上,在任何匹配项周围注入
。我不能只执行直接向上替换,因为我将丢失输入字符串中的原始大小写。

您可以使用以下命令执行直接向上替换:

str.replace(/cat/ig,函数替换(匹配){
返回“”+匹配+“”;
});

您可以非常简单地解决它,只需将
捕获组
与所需的
单词
一起使用,然后使用替换字符串
$1
。您可以使用这样的正则表达式:

(cat)

下面,您可以看到绿色的匹配项(不敏感地捕获单词
cat
),在
替换部分可以看到替换项

您可以使用以下代码:

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);
var re=/(cat)/ig;
var str='“我喜欢和猫玩,凯西也是,她是美国猫虎协会的成员。”\n';
变量subst='$1';
var结果=str.replace(re,subst);
您可以使用:

"Foo bar cat".replace(/(cat)/ig, "<em>$1</em>");
“Foo-bar-cat”。替换(/(cat)/ig,“$1”);
将返回:

"Foo bar <em>cat</em>"
“Foo-bar-cat”

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

"Foo bar cat".replace(/cat/ig, "<em>$&</em>");
                                    ^^
“Foo-bar-cat”。替换(/cat/ig,$&);
^^
见以下章节:

$&
插入匹配的子字符串


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

您可以利用
$1
作为替换字符串,而不是函数。很好,在花了15分钟阅读其他帖子之后,我终于找到了我一直在寻找的东西!