我想要匹配不在'[]'
内的 ,
var strs='a,v,[b,c,e],d'.split(/,(?!([^\]\[]+]))/)
console.log(strs)
结果是这样
[ 'a', undefined, 'v', undefined, '[b,c,e]', undefined, 'd' ]
undefined是哪来的
我想要匹配不在'[]'
内的 ,
var strs='a,v,[b,c,e],d'.split(/,(?!([^\]\[]+]))/)
console.log(strs)
结果是这样
[ 'a', undefined, 'v', undefined, '[b,c,e]', undefined, 'd' ]
undefined是哪来的
摘自MDN
(?:x)
匹配 'x'
但是不记住匹配项。这种叫作非捕获括号,使得你能够定义为与正则表达式运算符一起使用的子表达式。来看示例表达式 /(?:foo){1,2}/
。如果表达式是 /foo{1,2}/
,{1,2}
将只对 ‘foo’
的最后一个字符 ’o‘
生效。如果使用非捕获括号,则{1,2}
会匹配整个 ‘foo’
单词。
这里由于使用括号产生了多余的捕获,改成这样就行了
var strs='a,v,[b,c,e],d'.split(/,(?!(?:[^\]\[]+]))/)
13 回答12.9k 阅读
7 回答2.1k 阅读
3 回答1.3k 阅读✓ 已解决
2 回答1.3k 阅读✓ 已解决
6 回答1.2k 阅读✓ 已解决
6 回答1.1k 阅读
2 回答1.3k 阅读✓ 已解决
undefine是由于你用了捕获组导致的,去掉()就行了