除括号

时间:2016-12-10 12:34:31

标签: javascript arrays regex string

我正在尝试将以下文本拆分为空格:

var line = "Text (what is)|what's a story|fable called|named|about {Search}|{Title}"

但是我希望它忽略括号内的空格。这应该产生一个数组:

var words = ["Text", "(what is)|what's", "a", "story|fable" "called|named|about", "{Search}|{Title}"];

我知道这应该包含某种带有line.match()的正则表达式。如果正则表达式删除括号,则奖励积分。我知道word.replace()会在后续步骤中摆脱它们。

3 个答案:

答案 0 :(得分:6)

使用以下方法使用特定的正则表达式模式(基于否定先行断言):

var line = "Text (what is)|what's a story|fable called|named|about {Search}|{Title}",
    words = line.split(/(?!\(.*)\s(?![^(]*?\))/g);
  
console.log(words);

  • (?!\(.*)确保分隔符\s前面没有大括号((包括话务员字符)
  • (?![^(]*?\))确保分隔符\s后面没有大括号)(包括话务员字符)

答案 1 :(得分:0)

没有一个正则表达式,但完成工作。删除括号并按空格分割文本。

var words = line.replace(/[\(\)]/g,'').split(" ");

答案 2 :(得分:0)

在某些情况下有用的一种方法是用占位符替换parens中的空格,然后拆分,然后替换:



var line = "Text (what is)|what's a story|fable called|named|about {Search}|{Title}";

var result = line.replace(/\((.*?)\)/g, m => m.replace(' ', 'SPACE'))
  .split(' ')
  .map(x => x.replace(/SPACE/g, ' '));
  
console.log(result);