我正在尝试将以下文本拆分为空格:
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()会在后续步骤中摆脱它们。
答案 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);