如何在忽略某些模式的同时在JavaScript中拆分字符串?

时间:2018-01-18 17:46:37

标签: javascript regex string split

我需要用空格分割一个字符串,但我现在面临的问题是这个字符串包含方括号,我需要忽略double oppening和close方括号之间的空格。 我举个例子。

str = 'test test string test[[test test[[ test]] test test]] test ";

在此字符串中,结果应为

[ 'test', 'test', 'string', 'test[[test test[[ test]] test test]]', 'test' ];

我在str.split(模式)中尝试了很多模式,但是无法找到一种方法。我可以为此编写一个完整的函数但是我想知道是否有更好的功能这样做的方式尤其是分裂方法,但当然我正在寻找所有可能的方法。 提前谢谢。

1 个答案:

答案 0 :(得分:0)

可能是较短的方法,但是首先映射要拆分的空间索引数组,然后将这些索引映射到关联的字符串,最后过滤掉空字符串



var str = 'test test string test[[test test[[ test]] test test]] test ',
openBrace = 0,
// create array of spaces to split
res = str.split('').reduce((a, c, i)=>{
  if( c === '['){openBrace++}
  if( c === ']'){openBrace--}
  if(c === ' ' && openBrace === 0){
     a.push(i);
  }
  return a;
},[])
// map space indices to strings
.reduce((a, c, i, arr)=> {
    return a.concat(str.slice(arr[i-1]||0, c).trim());
},[])
// remove empty strings
.filter(s => s);

console.log(res)