【问题标题】:Regex to match comments正则表达式匹配评论
【发布时间】:2012-08-15 20:52:11
【问题描述】:

我有两种类型的评论块

<!-- asdfasd //-->

<!--asdfasd-->

    <!--
<span onclick="window.open('http://www.abc.com?xyz=asfasdfasd')">magic</span>
-->

我只需要匹配第二个/第三个并且我有这个模式,我尝试了很多组合,但是没有运气。 cmets 还包含所有数字/字母/特殊字符

<!--[\s\S]*?-->

【问题讨论】:

  • 这个怎么样:。这匹配吗?
  • [\s\S]* 匹配您明显不想要的 any 字符。
  • 我认为split() 也可以完成这项工作

标签: javascript regex


【解决方案1】:

对于上面发布的确切字符串,这是有效的:

<!--[^-/]+-->

但是,如果 // 可能出现在注释中的任何位置,它将不起作用。

我需要更多信息以获得更准确的解决方案

干杯 坦纳利

【讨论】:

    【解决方案2】:

    应该这样做:

    <!--[^\/\s]+-->
    

    【讨论】:

      【解决方案3】:

      试试这个模式:

      <!-- *[a-z]+ *-->
      

      它应该适用于&lt;!--asdfasd--&gt;&lt;!-- asdfasd --&gt;

      编辑

      cmets 还包含所有数字/字母/特殊字符???

      添加所有预期的特殊字符,不要忘记转义:

      [a-zA-Z0-9"!\?_-]+
      

      【讨论】:

      • Nomik,如果 cmets 有换行符,则无法使用后续...
      • 仍有一些问题,如果 cmets 有 html 标签则无法正常工作
      【解决方案4】:

      只使用一个函数:

      这是我认为最正确的做法。

      var str='<!--asdfasd-->';
      
      var matches= str.match(/<!--.*?(\/*)-->/s)
      
      if (matches&&!matches[1].length>1) alert('You got me :)')
      

      解释:不管它有没有'//'我们先捕获它。

      然后我们检查第二个匹配的长度,我们将匹配任意数量的 '/' 。

      如果有两个或更多的斜线 - 它会提示'false';

      http://jsfiddle.net/WNM7G/2/

      【讨论】:

        【解决方案5】:
        <!--(\\?|.|\s).*[^/^/]-->
        

        这对我有用

        【讨论】:

          【解决方案6】:

          尝试以下模式:

          <!--[\s\S]+?-->
          

          它对我有用。

          【讨论】:

            猜你喜欢
            • 2012-12-23
            • 2017-01-10
            • 2021-12-31
            • 2011-10-09
            • 1970-01-01
            • 2017-03-24
            • 1970-01-01
            • 2019-11-01
            • 2015-04-09
            相关资源
            最近更新 更多