【问题标题】: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 --> 

我想要做的是将&lt;!-- USERNAME --&gt; 替换为其他文本。不幸的是,我创建的正则表达式实际上并没有按预期工作,例如替换了整个 &lt;!-- java-version --&gt; -UserName=&lt;!-- :USERNAME --&gt; 表达式。前两个事件被正确替换。哪里错了?

这是我所拥有的,在 javascript 控制台中进行测试:

var re = new RegExp('(<!--)(.)*(USERNAME)(.)?(-->)');

【问题讨论】:

  • 问题出在你的(.)* 上,这意味着:匹配任何东西,0 次或更多次,它匹配java-version --&gt; -UserName=&lt;!-- :
  • 这是你想要做的吗? regex101.com/r/lI8cV8
  • @VasiliSyrakis 请发表您的评论作为答案,因为现在它是唯一一个实际工作的 :) 谢谢!

标签: javascript regex string-matching


【解决方案1】:

正确的表达方式似乎是

/<!--(.(?!-->))*USERNAME.*?-->/g

【讨论】:

    【解决方案2】:

    我将以下技术用于 HTML、XML 和类似的东西(尽管在嵌套内容方面这是不好的做法)

    正则表达式

    (&lt;[^&gt;]*)(USERNAME)([^&gt;]*&gt;)


    演示

    http://regex101.com/r/lI8cV8

    【讨论】:

      猜你喜欢
      • 2013-01-06
      • 1970-01-01
      • 2019-11-28
      • 2010-11-25
      • 2013-08-21
      • 1970-01-01
      • 1970-01-01
      • 2020-08-17
      • 2011-07-31
      相关资源
      最近更新 更多