【问题标题】:Get the matches from specific groups从特定组中获取匹配项
【发布时间】:2013-12-24 08:21:50
【问题描述】:

我想验证一个字符串,然后从某些组中获取所有匹配项。

正则表达式:

/^<[A-Za-z0-9]>::=(<[A-Za-z0-9]>)+(\|(<[A-Za-z0-9]>)+)+$/

所以,如果我得到像 &lt;A&gt;::=&lt;B&gt;&lt;A&gt;|&lt;Y&gt;&lt;A&gt;|&lt;Z&gt; 这样的东西是有效的,但如果我得到像 &lt;A&gt;::=&lt;B&gt;| 这样的东西是假的。

验证没有问题,问题是我要取&lt;&gt;里面的文字,因为以后需要。

所以,如果我得到&lt;exparit&gt;::=&lt;number&gt;|&lt;number&gt;&lt;exparit&gt;,那么我想得到["exparit", "number", "number", "exparit"]

我的代码看起来像

Rules = {
  "BNF" : /^<[A-Za-z0-9]>::=(<[A-Za-z0-9]>)+(\|(<[A-Za-z0-9]>)+)+$/
};

var checkBNF = function ( bnf ) {
  if ( Rules.BNF.test( bnf ) ) {
    console.log('ok');
    //How to get the text inside < and > ??
  }
  else {
    console.log('no');
  }
};

我非常感谢任何形式的帮助,例如书籍、链接、示例或此问题的解决方案。

谢谢!

【问题讨论】:

    标签: javascript regex match


    【解决方案1】:

    如果我可以帮助你一点,这里有一些东西要统计:

    http://jsfiddle.net/URLhb/1/

    var test = "<A>::=<B><A>|<Y><A>|<Z>";
    
    var patt0 = /<([a-zA-Z]*)>/g; //Old and bad version
    var patt1 = /[a-zA-Z]+/g;
    
    var testRE = test.match(patt1);
    
    
    
    alert(testRE[0]);
    alert(testRE[1]);
    alert(testRE[2]);
    alert(testRE[3]);
    alert(testRE[4]);
    alert(testRE[5]);
    

    此代码将捕获 内的文本,以及带有它的 符号。我正在尝试解决这个问题,如果我得到更好的结果,我会更新。

    编辑:发现问题:我使用的是 * 而不是 + !现在完美运行!

    【讨论】:

      【解决方案2】:

      我所做的略有不同,因为我不确定您是否只会在 &lt;&gt; 中拥有 [a-zA-Z0-9]

      Rules = {
        "BNF" : /^<[A-Za-z0-9]>::=(<[A-Za-z0-9]>)+(\|(<[A-Za-z0-9]>)+)+$/
      };
      
      var checkBNF = function ( bnf ) {
        if ( Rules.BNF.test( bnf ) ) {
          console.log('ok');
      
          //How to get the text inside < and > ??
          var patt = /\<(.*?)\>/g;
          var strArray = bnf.match(patt);
          for (i=0;i<strArray.length;i++) {
              strArray[i] = strArray[i].replace('<','').replace('>','');
          }
          return strArray;
        }
        else {
          console.log('no');
        }
      };
      
      var test = "<A>::=<B><A>|<Y><A>|<Z>";
      var result = checkBNF(test);
      console.log(result)
      

      http://jsfiddle.net/UmT3P/

      【讨论】:

        猜你喜欢
        • 2022-10-17
        • 2021-06-06
        • 2022-12-12
        • 2020-10-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-30
        相关资源
        最近更新 更多