用“|”拆分不在方括号之间

时间:2013-11-25 20:10:22

标签: javascript regex

我需要拆分字符串,但忽略方括号之间的东西。 你可以想象这类似于忽略引号内的东西。

我遇到了引号的解决方案;

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

因此;

one|two"ignore|ignore"|three

会是;

one
two"ignore|ignore"
three

然而,我正在努力使其适应忽略[]而不是“。 部分原因在于有两个字符,而不是一个字符。部分原因是[]需要被转义,部分归结为我对正则表达式非常糟糕。

我的目标是获得;

因此;

one|two[ignore|ignore]|three

拆分为;

 one
 two[ignore|ignore]
 three
我尝试自己弄清楚但是我陷入了混乱; (\|)(?=(?:[^\[|\]]|\|][^\[|\]]*\[|\])*$) 我现在到处都看到括号和线条。

帮助!

4 个答案:

答案 0 :(得分:4)

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

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

您将第二个"替换为\[,将第一个和第三个替换为\]

Working on RegExr

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

您最好使用String#match

s='one|two[ignore|ignore]|three';
m = s.match(/[^|\[]+\[.*?\]|[^|]+/g);
//=> ["one", "two[ignore|ignore]", "three"]

答案 3 :(得分:0)

又一个解决方案:

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

它使用否定前瞻,遗憾的是,JS不支持 lookbehind