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