我需要拆分字符串,但忽略方括号之间的东西。 你可以想象这类似于忽略引号内的东西。
我遇到了引号的解决方案;
(\|)(?=(?:[^"]|"[^"]*")*$)
因此;
one|two"ignore|ignore"|three
会是;
one
two"ignore|ignore"
three
然而,我正在努力使其适应忽略[]而不是“。 部分原因在于有两个字符,而不是一个字符。部分原因是[]需要被转义,部分归结为我对正则表达式非常糟糕。
我的目标是获得;
因此;
one|two[ignore|ignore]|three
拆分为;
one
two[ignore|ignore]
three
我尝试自己弄清楚但是我陷入了混乱;
(\|)(?=(?:[^\[|\]]|\|][^\[|\]]*\[|\])*$)
我现在到处都看到括号和线条。
帮助!
答案 0 :(得分:4)
这是您发布的""
正则表达式的改编版本:
(\|)(?=(?:[^\]]|\[[^\]]*\])*$)
(\|)(?=(?:[^ "]| "[^ "]* ")*$) <- "" version for comparison
您将第二个"
替换为\[
,将第一个和第三个替换为\]
答案 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 。