找到正则表达式搜索/匹配的结束索引
如果我在正则表达式中使用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));
}
.match
返回一个新的数组具有以下属性:
索引属性被设置为匹配的子 的 位置完整的所述串内S.
输入属性设置为S.
长度属性设置为n +1。
的0属性被设置为匹配的子串 (即的Offset S 的该部分之间我包容和偏移 ë排斥)。
对于每个整数i,例如i> 0和i < = n,请将名为ToString(i)的属性设置为r的capture数组的第i个元素。
从http://bclary.com/2004/11/07/#a-15.10.6.2
match.index
将提供你所需要的。
或者:
if (match && match[0]) {
console.log ("end of match is at index " + (str.indexOf(match[0]) + match[0].length));
}
我想你是对的,如果你在match [0]上做了indexOf,它总是第一次出现。除非有一个奇怪的正则表达式,可能会让你第二次出现一个字符串...? – rob 2011-03-26 20:47:13
有趣....我已经注意到,Chrome把索引放在数组中(假设你没有/ g ....这样就会出现多个匹配,并且只有一个索引是没有意义的) 。如果这被所有合理的浏览器支持(...?),那就完美了。 – rob 2011-03-26 20:51:57