首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript正则表达式替换未按预期工作

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

Stack Overflow用户
提问于 2012-09-12 21:57:35
回答 2查看 159关注 0票数 0

测试字符串为:

代码语言:javascript
复制
hello hello hello

<span class="self-reference">Tom</span> I don't know <span class="self-reference">Tom</span> I don't think.

我想说的是:

代码语言:javascript
复制
hello hello hello

@Tom I don't know @Tom I don't think.

我使用这个正则表达式:

代码语言:javascript
复制
comment = comment.replace(/\<span class="self-reference"\>(.*)\<\/span\>/gi,"@$1");

但它会输出:

代码语言:javascript
复制
hello hello hello

@Tom</span> I don't know <span class="self-reference">Tom I don't think.

谁能告诉我如何修改它,让它像预期的那样工作?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-12 22:00:10

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

代码语言:javascript
复制
comment = comment.replace(/\<span class="self-reference"\>(.*?)\<\/span\>/gi,"@$1");

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

惰性量化

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

(source)

票数 3
EN

Stack Overflow用户

发布于 2012-09-12 22:02:41

另一种可能的解决方案是:

代码语言:javascript
复制
comment = comment.replace(/\<span class="self-reference"\>([^<]+)\<\/span\>/gi,"@$1");

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12389882

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档