【问题标题】:Get the index of the group that matched in a regexp?获取在正则表达式中匹配的组的索引?
【发布时间】:2013-02-01 11:22:25
【问题描述】:

我有一个正则表达式:

/(alpha)|(beta)|(gamma)/gi

一些要匹配的文本:

Betamax. Digamma. Alphabet. Hebetation.

匹配项是:

beta, gamma, alpha, beta

我正在寻找的值是:

1,2,0,1

...我可以确定在正则表达式中匹配的组的索引吗?

【问题讨论】:

    标签: javascript regex indexing match regex-group


    【解决方案1】:

    access the groups,你需要反复使用.exec()

    var regex = /(alpha)|(beta)|(gamma)/gi,
        str = "Betamax. Digamma. Alphabet. Hebetation.";
    for (var nums = [], match; match = regex.exec(str); )
        nums.push(match.lastIndexOf(match[0]));
    

    如果你想让索引从零开始,你可以使用

        nums.push(match.slice(1).indexOf(match[0]));
    

    【讨论】:

    • 这是迄今为止我最喜欢的,我喜欢你使用结果操作来获得从零开始的结果。
    • 是的,它看起来不错,并且允许我们使用indexOf 而不是向后搜索。不过,仅将 - 1 附加到第一个会更短且性能更高:)
    【解决方案2】:

    从字符串数组构建您的正则表达式,然后使用 indexOf 查找匹配项。

    【讨论】:

      【解决方案3】:

      如果我们考虑您提供的确切样本,以下将起作用:

      var r = /(alpha)|(beta)|(gamma)/gi;
      var s = "Betamax. Digammas. Alphabet. Habetation.";
      
      var matched_indexes = [];
      var cur_match = null;
      
      while (cur_match = r.exec(s))
      {
          matched_indexes.push(cur_match[1] ? 0 : cur_match[2] ? 1 : 2 );
      }
      
      console.log(matched_indexes);
      

      我把它留给你,让循环的内容更加动态/通用:p

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-06-22
        • 1970-01-01
        • 1970-01-01
        • 2015-03-10
        • 1970-01-01
        • 2012-08-07
        • 1970-01-01
        相关资源
        最近更新 更多