0

测试字符串是:

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.

谁能告诉我如何修改它以使其按预期工作?

4

2 回答 2

3

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

comment = comment.replace(/\<span class="self-reference"\>(.*?)\<\/span\>/gi,"@$1");

如果没有?我添加,您的正则表达式 (.*) 将匹配整个字符串,直到</span>它在您的字符串中找到的最后一个。使用非贪婪运算符*?,您可以在找到匹配项后立即停止匹配。

惰性量化

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

来源

于 2012-09-12T14:00:10.487 回答
2

另一种可能的解决方案:

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

([^<]+)捕获所有字符,直到<找到

于 2012-09-12T14:02:41.180 回答