我试图按空格/空格分割句子,但我必须排除位于括号()
内的空格,赞美{}
或方括号[]
。
ex string:[apples carrots] (car plane train) {food water} foo bar
应该生成一个包含以下内容的数组:
有什么想法吗?
答案 0 :(得分:4)
不分裂,但匹配和修剪。示例在JavaScript中,您可以在浏览器控制台中试用:
var a = '[apples carrots] (car plane train) {food water} foo bar';
a.match(/[a-zA-Z0-9\[\]\(\){}]+/g).map(function (s) { return s.replace(/[\[\]\(\)\{\}]/, ''); });
["apples", "carrots", "car", "plane", "train", "food", "water", "foo", "bar"]
可替换地:
a.split(/\s+(?![^\[]*\]|[^(]*\)|[^\{]*})/)
产地:
["[apples carrots]", "(car plane train)", "{food water}", "foo", "bar"]
答案 1 :(得分:3)
在空格上拆分,然后是正向前瞻,检查下一个括号字符(如果有)是否为开放字符(或输入结束):
\s+(?=[^\])}]*([\[({]|$))
答案 2 :(得分:0)
匹配外部空间(),{}和[]使用此模式(\s)(?:(?=(?:(?![\]\)}]).)*[\[\({])|(?!.*[\]\)}]))
Demo