测试字符串是:
hello hello hello
<span class="self-reference">Tom</span> I don't know <span class="self-reference">Tom</span> I don't think.
我希望以:
出来hello hello hello
@Tom I don't know @Tom I don't think.
我使用这个正则表达式:
comment = comment.replace(/\<span class="self-reference"\>(.*)\<\/span\>/gi,"@$1");
但它输出:
hello hello hello
@Tom</span> I don't know <span class="self-reference">Tom I don't think.
有谁能告诉我如何修改它以便按预期工作?
答案 0 :(得分:3)
使用非贪婪的正则表达式匹配:
comment = comment.replace(/\<span class="self-reference"\>(.*?)\<\/span\>/gi,"@$1");
如果我添加了?
,那么你的正则表达式(。*)将匹配整个字符串,直到它在字符串中找到的最后</span>
。使用非贪婪的操作符*?
,您可以在找到匹配项后立即停止匹配。
懒惰量化
正则表达式中的标准量词是贪婪的,这意味着它们尽可能匹配。
(source)
答案 1 :(得分:2)
另一种可能的解决方案:
comment = comment.replace(/\<span class="self-reference"\>([^<]+)\<\/span\>/gi,"@$1");
([^<]+)
会捕获所有字符,直到找到<