我试图用空格/空格来分割一个句子,但我必须排除位于括号()
、荣誉{}
或方括号内的空格[]
。
ex string:[apples carrots] (car plane train) {food water} foo bar
应该产生一个数组,其中包含:
- [苹果胡萝卜]
- (汽车飞机火车)
- {食物水}
- 富
- 酒吧
有任何想法吗?
我试图用空格/空格来分割一个句子,但我必须排除位于括号()
、荣誉{}
或方括号内的空格[]
。
ex string:[apples carrots] (car plane train) {food water} foo bar
应该产生一个数组,其中包含:
有任何想法吗?
不是拆分,而是匹配和修剪。示例在 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"]
在空白处拆分,然后进行正向前瞻,检查下一个括号字符(如果有)是否为开放字符(或输入结束):
\s+(?=[^\])}]*([\[({]|$))
匹配 ()、{} 和 [] 外的空格使用此模式(\s)(?:(?=(?:(?![\]\)}]).)*[\[\({])|(?!.*[\]\)}]))
Demo