javascript正则问题

我想要匹配不在'[]'内的 ,

var strs='a,v,[b,c,e],d'.split(/,(?!([^\]\[]+]))/)
console.log(strs)

结果是这样

[ 'a', undefined, 'v', undefined, '[b,c,e]', undefined, 'd' ]

undefined是哪来的

阅读 2.7k
5 个回答
var strs='a,v,[b,c,e],d'.split(/,(?![^\]\[]+])/);

图片描述

undefine是由于你用了捕获组导致的,去掉()就行了

应该是 ,

'a,v,[b,c,e],d'.split(/,(?![^\]\[]+])/)

'a,v,[b,c,e],d'.replace(/\[.*\]/g,"").match(/,/g)

摘自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(/,(?!(?:[^\]\[]+]))/)
var str = 'a,v,[b,c,e],d'.replace(/\[.*\]/g,'');
console.log(str);//a,v,,d
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题