Javascript 如何获取与regexp匹配的表达式
我正在尝试获取在regexp中匹配的表达式,它不清楚,因此有一些代码需要您理解:Javascript 如何获取与regexp匹配的表达式,javascript,regex,Javascript,Regex,我正在尝试获取在regexp中匹配的表达式,它不清楚,因此有一些代码需要您理解: while (something) { mymap[stmt.name] = {v : stmt.var}; //stmt.name is changing on each loop regexpString += stmt.name+"(.*)|"; } regexpString = regexpString.slice(0, -1); regexpE = new RegExp(regexpStr
while (something) {
mymap[stmt.name] = {v : stmt.var}; //stmt.name is changing on each loop
regexpString += stmt.name+"(.*)|";
}
regexpString = regexpString.slice(0, -1);
regexpE = new RegExp(regexpString, "i");
test = regexpE.exec(somevar);
现在,我想通过mymap[test]
或类似的方式获取匹配的stmt.name
,以便在映射中获取元素
有没有一条路穿过它,或者有一条我没有看到的更好的路?我不想每次都循环使用stmt.name
,这样会很重
如果我的
regexpString
等于http://foo.bar(.*)|https://bar.foo/foobar/(.*)
我希望能够获得http://foo.bar
或https://bar.foo/foobar/
根据我的somevar
变量为什么不捕获它呢?使用
var names = [];
while (something) {
mymap[stmt.name] = {v : stmt.var}; //stmt.name is changing on each loop
names.push(stmt.name);
}
var regexpE = new RegExp("("+names.join("|")+")(.*)", "i");
var test = regexpE.exec(somevar);
var name = test[1],
_var = mymap[name].v;
不,这远不清楚…共享一些输入和预期输出。
$&
可能是您需要的,但不清楚您在问什么。如果不知道您的stmt.name
看起来像什么以及最终正则表达式看起来像什么,很难说。但是,如果您的正则表达式中有多个组(因为()
),您应该能够通过查看组索引来判断哪个组匹配。例如regexpE.exec(somevar)[1]!=如果myregexpString
等于http://foo.bar(.*)|https://bar.foo/foobar/(.*)
我希望能够获得http://foo.bar
或https://bar.foo/foobar/
根据我的somevar
变量,因为如果我的输入是http://foo.bar/bar/bar/bar
,它将返回http://foo.bar/bar/bar/bar
而不是http://foo.bar/
我还希望在我的名字中包含一些捕获字符串。因此,我认为这是一种更好的方法,例如,我希望能够有这样一个名称:^https?:/(foor|bar)\(org|com)/
只有当您有一个匹配完整输入的名称时,它才会在第一次捕获时返回完整输入。您能否提供一些应该循环的示例stmt
s?