Regex 正则表达式匹配空间不在括号内、荣誉或方形巴拉克中

Regex 正则表达式匹配空间不在括号内、荣誉或方形巴拉克中,regex,Regex,我试图用空格/空格分隔一个句子,但我必须排除括号内的空格()、赞扬{}或方括号[] 例如字符串:[apples-carrots](car-plane-train){food-water}foo-bar应生成一个包含以下内容的数组: [苹果胡萝卜] (汽车、飞机、火车) {食物水} 福 酒吧 有什么想法吗?不是拆分,而是匹配和修剪。示例为JavaScript,您可以在浏览器控制台中试用: var a = '[apples carrots] (car plane train) {food wat

我试图用空格/空格分隔一个句子,但我必须排除括号内的空格
()
、赞扬
{}
或方括号
[]

例如字符串:
[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)(?:(?=(?:(![\]\])*[\[\({])(?!.[\]\}]))

在空格上分割,然后向前看,检查下一个括号字符(如果有的话)是否为开放字符(或输入结束):


可能重复的Do forsee嵌套标点符号(平衡)。如果这是真的,那么也有解决办法。仅供参考。您可能缺少一个右括号<代码>\s+(@sln相当不错。Fixed.Thx。(我在iPhone上输入了它-很难找到这样的东西)@波希米亚人,这对我来说并不是真的有效:它缺少了一些不存在的空白parenthesis@francoisromain你的具体输入是什么?你希望从比赛中得到什么?@Natt我想如果修改为使用方括号,你会做什么
\s+(?=[^\])}]*([\[({]|$))