[英]Splitting by “ | ” not between square brackets
我需要拆分一个字符串,但忽略方括号之间的东西。 你可以想象这类似于忽略引号内的东西。
我遇到了报价的解决方案;
(\\|)(?=(?:[^"]|"[^"]*")*$)
所以;
one|two"ignore|ignore"|three
将会;
one
two"ignore|ignore"
three
但是,我正在努力调整这个以忽略[]而不是“。部分原因是它有两个角色,而不是一个。部分归结为[]需要被转义,部分归结为我非常糟糕regexs。
我的目标是获得;
所以;
one|two[ignore|ignore]|three
分裂为;
one
two[ignore|ignore]
three
我试着弄清楚自己,但我陷入了混乱; (\\|)(?=(?:[^\\[|\\]]|\\|][^\\[|\\]]*\\[|\\])*$)
我现在到处都看到括号和行。
救命!
这是您发布的""
正则表达式的改编版本:
(\|)(?=(?:[^\]]|\[[^\]]*\])*$)
(\|)(?=(?:[^ "]| "[^ "]* ")*$) <- "" version for comparison
你用\\[
替换第二个"
\\[
和第一个和第三个用\\]
使用split方法,您可以使用此模式,因为捕获组显示结果:
\|((?:[^[|]+|\[[^\]]+])*)\|
你应该更好地使用String#match
:
s='one|two[ignore|ignore]|three';
m = s.match(/[^|\[]+\[.*?\]|[^|]+/g);
//=> ["one", "two[ignore|ignore]", "three"]
又一个解决方案:
"one|two[ignore|ignore]|three".split( /\|(?![^\[]*\])/ )
它使用负向前瞻 ,遗憾的是JS不支持lookbehind 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.