正则表达式抓取太多文本
Posted
技术标签:
【中文标题】正则表达式抓取太多文本【英文标题】:Regex grabbing too much text 【发布时间】:2014-02-01 22:02:15 【问题描述】:假设我有以下文字:
foo bar baz <!-- USERNAME --> <!-- ACCESS_KEY --> baz bar foo
<!--:USERNAME-->
<!-- eueuteh -->
-DarchetypeVersion=<!-- java-version --> -UserName=<!-- :USERNAME --> -DsauceAccessKey=<!-- ACCESS_KEY -->
我想要做的是将<!-- USERNAME -->
替换为其他文本。不幸的是,我创建的正则表达式实际上并没有按预期工作,例如替换了整个 <!-- java-version --> -UserName=<!-- :USERNAME -->
表达式。前两个事件被正确替换。哪里错了?
这是我所拥有的,在 javascript 控制台中进行测试:
var re = new RegExp('(<!--)(.)*(USERNAME)(.)?(-->)');
【问题讨论】:
问题出在你的(.)*
上,这意味着:匹配任何东西,0 次或更多次,它匹配java-version --> -UserName=<!-- :
。
how to make Regular expression into non-greedy?的可能重复
这是你想要做的吗? regex101.com/r/lI8cV8
@VasiliSyrakis 请发表您的评论作为答案,因为现在它是唯一一个实际工作的 :) 谢谢!
【参考方案1】:
正确的表达方式似乎是
/<!--(.(?!-->))*USERNAME.*?-->/g
【讨论】:
【参考方案2】:我将以下技术用于 html、XML 和类似的东西(尽管在嵌套内容方面这是不好的做法)
正则表达式
(<[^>]*)(USERNAME)([^>]*>)
演示
http://regex101.com/r/lI8cV8
【讨论】:
以上是关于正则表达式抓取太多文本的主要内容,如果未能解决你的问题,请参考以下文章