要替换的Javascript Regex无法按预期工作

Javascript Regex to replace not working as expected

本文关键字:工作 替换 Javascript Regex      更新时间:2023-09-26

测试字符串为:

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.

有人能告诉我如何修改它,使其按预期工作吗?

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

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

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

延迟量化

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

(来源)

另一种可能的解决方案:

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

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