Javascript正则表达式替换不按预期工作

时间:2012-09-12 13:57:35

标签: 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.

我希望以:

出来
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.

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

2 个答案:

答案 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");

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