4

我试图用空格/空格来分割一个句子,但我必须排除位于括号()、荣誉{}或方括号内的空格[]

ex string:[apples carrots] (car plane train) {food water} foo bar应该产生一个数组,其中包含:

  • [苹果胡萝卜]
  • (汽车飞机火车)
  • {食物水}
  • 酒吧

有任何想法吗?

4

3 回答 3

5

不是拆分,而是匹配和修剪。示例在 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"]
于 2013-09-17T23:21:43.850 回答
4

在空白处拆分,然后进行正向前瞻,检查下一个括号字符(如果有)是否为开放字符(或输入结束):

\s+(?=[^\])}]*([\[({]|$))
于 2013-09-17T23:41:18.947 回答
0

匹配 ()、{} 和 [] 外的空格使用此模式(\s)(?:(?=(?:(?![\]\)}]).)*[\[\({])|(?!.*[\]\)}])) Demo

于 2013-09-17T23:30:38.937 回答