如何获取匹配表达式的组表达式部分?

时间:2016-04-12 13:33:59

标签: javascript regex

鉴于var expression = /(a.)|(b.)|(c.)/;,为了匹配var value = "axx",我希望能够获得与expression匹配的value部分,在这种情况下, (a.)

(这是一个现已删除的帖子的转发,这是错误的,但可以理解为标记为重复。我想要获得的是正则表达式的一部分,而不是匹配字符串的部分)。

1 个答案:

答案 0 :(得分:1)

function getFirstMatchedGroupIndex(regex, test_str) {
   var result = test_str.match(regex);
   if (result) {
       return result.splice(1).findIndex(x => x);
   }
}

var reg = /(a.)|(b.)|(c.)/;

getFirstMatchedGroupIndex(reg, "axx"); // 0
getFirstMatchedGroupIndex(reg, "bxx"); // 1
getFirstMatchedGroupIndex(reg, "cxx"); // 2
getFirstMatchedGroupIndex(reg, "xxx"); // undefined

此函数利用了以下事实:在匹配的情况下,字符串方法match返回包含以下条目的数组:

  • 作为第一个索引:测试字符串中与正则表达式匹配的部分。
  • 以下索引包含捕获组的内容(从给定正则表达式的左两右开始​​计算),当组不匹配时,将保存未定义。