要替换的Javascript正则表达式未按预期工作

要替换的Javascript正则表达式未按预期工作,javascript,regex,Javascript,Regex,测试字符串为: hello hello hello <span class="self-reference">Tom</span> I don't know <span class="self-reference">Tom</span> I don't think. 我使用这个正则表达式: comment = comment.replace(/\<span class="self-reference"\>(.*)\<\/spa

测试字符串为:

hello hello hello

<span class="self-reference">Tom</span> I don't know <span class="self-reference">Tom</span> I don't think.
我使用这个正则表达式:

comment = comment.replace(/\<span class="self-reference"\>(.*)\<\/span\>/gi,"@$1");
comment=comment.replace(/\(.*)\/gi,@$1”);
但它输出:

hello hello hello

@Tom</span> I don't know <span class="self-reference">Tom I don't think.
你好 @汤姆,我不认识汤姆,我想我不认识。
有人能告诉我如何修改它以使其按预期工作吗?

使用非贪婪正则表达式匹配:

comment = comment.replace(/\<span class="self-reference"\>(.*?)\<\/span\>/gi,"@$1");
comment=comment.replace(/\(.*?)\/gi,@$1);
如果没有我添加的
,您的正则表达式(.*)将匹配整个字符串到它在字符串中找到的最后一个
。使用非贪婪运算符
*?
可以在找到匹配项后立即停止匹配

惰性量化

正则表达式中的标准量词是贪婪的,这意味着它们尽可能匹配


()

使用非贪婪正则表达式匹配:

comment = comment.replace(/\<span class="self-reference"\>(.*?)\<\/span\>/gi,"@$1");
comment=comment.replace(/\(.*?)\/gi,@$1);
如果没有我添加的
,您的正则表达式(.*)将匹配整个字符串到它在字符串中找到的最后一个
。使用非贪婪运算符
*?
可以在找到匹配项后立即停止匹配

惰性量化

正则表达式中的标准量词是贪婪的,这意味着它们尽可能匹配


()

另一种可能的解决方案:

comment = comment.replace(/\<span class="self-reference"\>([^<]+)\<\/span\>/gi,"@$1");

comment=comment.replace(/\([^另一种可能的解决方案:

comment = comment.replace(/\<span class="self-reference"\>([^<]+)\<\/span\>/gi,"@$1");

comment=comment.replace(/\([^必选..必选..尽管它与贪婪的:-完全相反)尽管它与贪婪的:-完全相反)