获取正则表达式中匹配字符串的索引
Getting index of matched strings in Regex Expression
我试图从值的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);
}
我知道这目前不起作用,我正在努力找出解决这个问题的方法。每次都卡住了,我来到堆栈溢出社区问你,当我试图实现以下(对于arr2
的结果)时,我做错了什么:
[{string: "foo", index: 0},
{string: "foo", index: 27},
{string: "bar", index: 4},
{string: "bar", index: 30}]
您可以使用以下代码:
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以获得匹配的整个文本,因为没有设置捕获组(模式中没有未转义的圆括号)。
由于您正在使用全局正则表达式,您应该继续调用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});
}
相关文章:
- AngularJS-ng使用字符串索引在数组上重复
- 在 JavaScript 中动态创建带有字符串索引的二维表
- 按字符串索引的 Javascript 数组
- 按字符串索引访问字典对象
- 每个和字符串索引
- 使用字符串中的开始和结束单词以及 javascript 中的子字符串索引查找子字符串
- JavaScript 数组中的字符串索引
- 如何从数组中删除特定元素?与字符串索引
- Why for var在数组中返回一个字符串索引
- 为什么数组中的字符串索引不会增加'长度'
- 字符插入错误的字符串索引
- Javascript字符串索引
- 如何在不计算扩展实体的情况下找到标记(元素)的字符串索引?
- 如何忽略字符串索引中的空格,并在句子中的每个单词上以大写字母开头
- Jquery的每个函数都不能用于字符串索引数组
- 为什么IE's插入符在文本输入中的位置不等于字符串索引?解决方法是什么?
- 字符串索引器在本地工作,但在网站托管时不起作用
- 在Javascript中迭代由字符串索引的数组
- 在javascript中创建两个数组的字符串索引对象
- 如何创建具有字符串索引的二维对象并循环遍历结果