Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何获取与regexp匹配的表达式_Javascript_Regex - Fatal编程技术网

Javascript 如何获取与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

我正在尝试获取在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(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]!=如果my
regexpString
等于
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?