如何在JavaScript中获取正则表达式匹配的开始和结束位置?

时间:2011-08-29 22:51:09

标签: javascript regex substring

我只想找到我要搜索的子串的起点和终点位置。 关于如何做到这一点的任何想法?

2 个答案:

答案 0 :(得分:6)

这是一个jsfiddle,展示了它是如何完成的......

https://jsfiddle.net/cz8vqgba/

var regex = /text/g;
var text = 'this is some text and then there is some more text';
var match;
while(match = regex.exec(text)){
    console.log('start index= ' +(regex.lastIndex - match[0].length));   
    console.log('end index= ' + (regex.lastIndex-1));
}

这将为您提供字符串中所有匹配项的开始和结束索引...

答案 1 :(得分:3)

根本不需要两次穿越干草堆(可能效率较低)

你可以这样做:

"foobarfoobar".match(/bar/);

或:

/bar/.exec("foobarfoobar");

都返回此对象:

{
    0: 'bar'
    index: 3
    input: 'foobarfoobar'
}

所以如果你想要开始和结束位置,你只需要做类似的事情:

var needle = /bar/;
var haystack = 'foobarfoobar';

var result = needle.exec(haystack);
var start = result.index;
var end = start + result[0].length - 1;

注意这个简单的例子只给你第一场比赛;如果你期待几场比赛,事情会变得更复杂。

另外,我回答正则表达式,因为它在问题的标题中,但如果您只需要字符串匹配,则可以使用indexOf()执行几乎相同的操作。