获取在正则表达式中匹配的组的索引?
Posted
技术标签:
【中文标题】获取在正则表达式中匹配的组的索引?【英文标题】: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
...我可以确定在正则表达式中匹配的组的索引吗?
【问题讨论】:
【参考方案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
【讨论】:
以上是关于获取在正则表达式中匹配的组的索引?的主要内容,如果未能解决你的问题,请参考以下文章