正则表达式匹配空间不在括号,赞誉或方括号内

时间:2013-09-17 23:12:25

标签: regex

我试图按空格/空格分割句子,但我必须排除位于括号()内的空格,赞美{}或方括号[]

ex string:[apples carrots] (car plane train) {food water} foo bar应该生成一个包含以下内容的数组:

  • [苹果胡萝卜]
  • (汽车飞机列车)
  • {food water}
  • FOO

有什么想法吗?

3 个答案:

答案 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