Javascript Regex在Regex tester中工作,但不在JS中(错误匹配)

Javascript Regex在Regex tester中工作,但不在JS中(错误匹配),javascript,regex,Javascript,Regex,这实际上是我第一次遇到这个问题。 我正在尝试为键值对解析字符串,其中分隔符可以是不同的字符。它在任何正则表达式测试程序中都可以正常工作,但在我当前的JS项目中却不行。我已经发现,JS正则表达式的工作原理与php不同。但我找不到什么可以改变我的 我的正则表达式如下: [(\?\ \&\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \)]([^=]+)\=([^

这实际上是我第一次遇到这个问题。 我正在尝试为键值对解析字符串,其中分隔符可以是不同的字符。它在任何正则表达式测试程序中都可以正常工作,但在我当前的JS项目中却不行。我已经发现,JS正则表达式的工作原理与php不同。但我找不到什么可以改变我的

我的正则表达式如下:

[(\?\ \&\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \)]([^=]+)\=([^\&\ \ \ \ \ \ \ \ \ \ \ \)

它应该匹配:

#foo=bar#site=test

MATCH 1
1.  [1-4]   `foo`
2.  [5-8]   `bar`
MATCH 2
1.  [9-13]  `site`
2.  [14-18] `test`
而JS是:

“#foo=bar#site=test”。匹配(/[(\?\ \&&\ \ \)]([^=]+)\=([^\&\ \)+)/g)

结果:

["#foo=bar", "#site=test"]
对我来说,分组似乎工作不正常。 有办法解决这个问题吗?

String#match
不包括捕获组。相反,您可以循环执行
regex.exec

var match;
while (match = regex.exec(str)) {
    // Use each result
}
如果(像我一样)这种情况下的任务困扰你,你可以使用
使其明确成为一项测试:

var match;
while (!!(match = regex.exec(str))) {
    // Use each result
}
例如:

var regex=/[(\?\ \&\ \ \ \ \ \)]([^=]+)\=([^\&\ \])/g;
var str='#foo=bar#site=test';
var匹配;
而(!!(match=regex.exec(str))){
控制台日志(“结果”,匹配);

}
我不会依赖复杂的正则表达式,因为奇怪的原因,它可能会在任何时候失败,并且很难读取,但我会使用简单的函数来拆分字符串:

var str = '#foo=bar#site=test'

// split it by # and do a loop
str.split('#').forEach(function(splitted){
    // split by =
    var splitted2 = splitted.split('=');
    if(splitted2.length === 2) {
        // here you have
        // splitted2[0] = foo
        // splitted2[1] = bar
        // and in the next iteration
        // splitted2[0] = site
        // splitted2[1] = test
    }
}