我试图从for循环的值中获取匹配字符串的索引,以匹配字符串...
示例:
var arr = ["foo", "bar"],
arr2 = [];
for(var j=0;j<arr.length;j++){
var str = "foo bar flub alien alcohol foo bar foo",
re = new RegExp("("+arr[j]+")", "ig"),
//method = str.match(re) || re.exec(str),
obj = {match: method, index: method.index};
arr2.push(obj);
console.log(obj);
}
我知道这目前无效,我正在尝试找出解决此问题的方法。每次都卡住了,我来到Stack Overflow社区问你,当我试图实现以下目的时,我做错了什么(arr2
的结果):
[{string: "foo", index: 0},
{string: "foo", index: 27},
{string: "bar", index: 4},
{string: "bar", index: 30}]
答案 0 :(得分:1)
您可以使用以下代码:
var arr = ["foo", "bar"];
arr2 = [];
for(var j=0;j<arr.length;j++){
var str = "foo bar flub alien alcohol foo bar foo";
re = new RegExp(arr[j], "ig");
while ((m = re.exec(str))!== null) {
if (m.index === re.lastIndex) {
re.lastIndex++;
}
obj = {match: m[0], index: m.index};
arr2.push(obj);
console.log(obj);
}
}
我改变了:
exec
来访问多个匹配项。 m.index
是字符串中匹配的基于* 0的索引。*( MDN )
我使用m[0]
访问组0以获取匹配的整个文本,因为没有设置捕获组(模式中没有未转义的圆括号)。
答案 1 :(得分:0)
由于您使用的是全局正则表达式,因此您应该继续调用exec
,直到无法匹配为止。您可以使用while
循环执行此操作。
var arr = ["foo", "bar"],
arr2 = [],
str = "foo bar flub alien alcohol foo bar foo";
for(var j=0; j<arr.length; j++) {
var re = new RegExp(arr[j], "ig"),
match;
while(match = re.exec(str))
arr2.push({string: match[0], index: match.index});
}