Javascript 如何在我的RegExp中为每个匹配获取startIndex

Javascript 如何在我的RegExp中为每个匹配获取startIndex,javascript,regex,Javascript,Regex,我对RegExp结果有点纠结。基本上,我想要的是一个startIndex,它为与源字符串相关的每个匹配提供了准确的位置。所以不是一个带字符串的数组 var regex = /(?:\w*) from "(\w*)"/g var result = regex.exec('import foo from "foo"'); console.log(result.slice(1)) // => ["foo"] 我想要一个像这样的物体: [{ value: 'foo', startInde

我对RegExp结果有点纠结。基本上,我想要的是一个
startIndex
,它为与源字符串相关的每个匹配提供了准确的位置。所以不是一个带字符串的数组

var regex = /(?:\w*) from "(\w*)"/g
var result = regex.exec('import foo from "foo"');
console.log(result.slice(1)) // => ["foo"]
我想要一个像这样的物体:

[{
  value: 'foo',
  startIndex: 17
}]
我认为如果不使用特殊的库,这是不可能的,所以我的问题是:

你知道有哪个库可以返回更精确的匹配信息,或者其他解决方案吗

注意,这只是一个示例RegExp。在实际应用中,我将有10多个完全不同的RegExp。因此,首选动态方法

添加

我需要在下一个主要版本的。目前,链接替换是使用jquery选择器完成的,这不是很灵活,有时是错误的。RegExp有望减少开销,以便其他开发人员可以轻松地使用其他语言(如Ruby、Python等)扩展应用程序。。。。目前只支持JavaScript

这就是为什么我要寻找一个坚实而灵活的解决方案

–谢谢

公认的答案似乎很接近。我在下面对它进行了一些修改,它似乎接近了要求

var str='import foo from“foo”import bar from“bar”'
var regex=/(?:\w*)来自“(\w*)”/g;
var输出=[];
而((result=regex.exec(str))){
变量偏移量=结果[0]。lastIndexOf(结果[1]);
push('Value:'+result[1]+',startIndex:'+(result.index+offset));
}
document.getElementById('results').innerHTML=output

@PaulRoub:我不认为它是重复的,您链接的内容回答了这个问题。@PaulRoub如果字符串不包含两次“foo”,那么链接中提供的解决方案将有效。所以要找到正确的位置并不是那么容易。@stefanbuck:我作为评论员参与了这个问题,我确信这是从JavaScript有限的API中可以得到的最好结果。@stefanbuck在你的例子中,包含两次
foo
,只需使用
lastIndexOf
而不是
indexOf
函数您需要索引做什么?替换可以通过替换回调来完成。OP需要捕获组1的开始索引,而不是整个匹配的开始索引(由exec返回)。Mhhh。。。如果RegExp结尾不包含self值,则这可能会起作用,例如:
var str='import foo from“foo”foo'var regex=/(?:\w*)from“(\w*)”foo/g我不确定这在我的用例中是否是一个大问题。。。我必须检查一下。@stefanbuck您可以从“(\w*)”(?=\1)