Javascript 按“开”拆分&引用;不在方括号内

Javascript 按“开”拆分&引用;不在方括号内,javascript,regex,Javascript,Regex,我需要拆分一个字符串,但忽略方括号中的内容。 你可以想象这类似于忽略引号中的内容 我遇到了一个报价的解决方案 (\\\)(?=(?:[^”]|“[^”]*”*)*$) 所以, 1 | 2“忽略|忽略”| 3 会是, one two"ignore|ignore" three 然而,我正在努力将其调整为忽略[]而不是”。 部分原因是有两个字符,而不是一个。部分原因是[]需要转义,部分原因是我在正则表达式中非常糟糕 我的目标是得到 所以, 1 | 2[忽略|忽略]| 3 拆分为 one two[

我需要拆分一个字符串,但忽略方括号中的内容。 你可以想象这类似于忽略引号中的内容

我遇到了一个报价的解决方案

(\\\)(?=(?:[^”]|“[^”]*”*)*$)

所以,

1 | 2“忽略|忽略”| 3

会是,

one
two"ignore|ignore"
three
然而,我正在努力将其调整为忽略[]而不是”。 部分原因是有两个字符,而不是一个。部分原因是[]需要转义,部分原因是我在正则表达式中非常糟糕

我的目标是得到

所以,

1 | 2[忽略|忽略]| 3

拆分为

 one
 two[ignore|ignore]
 three
我试着自己弄明白,但我陷入了一片混乱;
(\\\)(?=(?:[^\[\\]\\\\\].[^\[\\]]*\[\\]])*$)
我现在到处都能看到括号和线条


帮助!

使用拆分方法,您可以使用此模式,因为捕获组显示结果:

\|((?:[^[|]+|\[[^\]]+])*)\|

这是您发布的
正则表达式的改编版本:

(\|)(?=(?:[^\]]|\[[^\]]*\])*$)
(\|)(?=(?:[^ "]| "[^ "]* ")*$) <- "" version for comparison
(\\\)(?=(?:[^\]\\[[^\]]*\]]*$)

(\\\)(?=(?:[^”]|“[^”]*”*$)您最好使用
String\35; match

s='one|two[ignore|ignore]|three';
m = s.match(/[^|\[]+\[.*?\]|[^|]+/g);
//=> ["one", "two[ignore|ignore]", "three"]
另一个解决方案:

"one|two[ignore|ignore]|three".split( /\|(?![^\[]*\])/ )

它使用负向前看,不幸的是,JS中不支持向后看。

我有点讨厌。有没有想过用一个TMP|U字符替换所有大括号中的“|”,然后在|上执行正则表达式,最后用“|”替换TMP|U字符。或者,TMP|U字符可以是的编码版本|“稍后再解码。老实说,这不是个坏主意。我正在mo尝试Casimirs解决方案,但我可能会在下一步尝试。这只是解决方案的一半——因为我还需要处理“[”和“]”。我想我也可以使用临时字符。我知道你可以做一些事情,如:encodeURIComponent to encode[,],|等。谢谢,这是一个插入式解决方案,实际上也有助于展示原来的一个如何工作。@darkflame简单地为你的需要创建一个函数也很简单,特别是如果拆分逻辑变得比这更复杂。