繁体   English   中英

分裂为“| “不在方括号之间

[英]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

你用\\[替换第二个" \\[和第一个和第三个用\\]

在RegExr上工作

使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM