我只想找到我要搜索的子串的起点和终点位置。 关于如何做到这一点的任何想法?
答案 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()执行几乎相同的操作。