查找正则表达式搜索/匹配的结束索引

时间:2011-03-26 06:25:29

标签: javascript regex

如果我将string.match()与正则表达式一起使用,我将返回匹配的字符串,但不会返回匹配发生的原始字符串的索引。如果我做string.search(),我得到索引,但我不一定知道字符串的匹配部分有多长。有没有办法做到这两点,所以我可以得到原始字符串中匹配的 结束 的索引?

我想我可以一个接一个地做(下面),假设他们以不同的方式返回相同的结果,但这看起来很丑陋和低效,我怀疑有更好的方法。

var str = "Fear leads to anger. Anger leads to hate. Hate leads to suffering"; 

var rgx = /l[aeiou]+d/i;
var match = str.match(rgx);
if (match && match[0]) {
  var i = str.search(rgx);
  console.log ("end of match is at index " + (i+match[0].length));
  }

2 个答案:

答案 0 :(得分:10)

.match返回一个包含以下属性的新数组:

  

index属性设置为   匹配子字符串的位置   在完整的字符串S中。

     

input属性设置为S.

     

length属性设置为n +1。

     

0属性设置为匹配   子串(即S的部分   在offset i包含和offset之间   独家)。

     

对于每个整数i,使i> 0且i <= n,将名为ToString(i)的属性设置为r的捕获数组的第i个元素。

来自http://bclary.com/2004/11/07/#a-15.10.6.2

match.index将提供您所需的信息。

答案 1 :(得分:0)

可替换地:

if (match && match[0]) {
    console.log ("end of match is at index " + (str.indexOf(match[0]) + match[0].length));
}