要替换的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(/\([^必选..必选..尽管它与贪婪的:-完全相反)尽管它与贪婪的:-完全相反)