JS / TS用分隔符分割字符串,而无需删除分隔符

时间:2018-08-26 16:02:07

标签: javascript typescript

我有一个字符串,需要用某个定界符分割并转换为数组,但不删除定界符本身。 例如,考虑以下代码:

var str = "#mavic#phantom#spark";
str.split("#") //["", "mavic", "phantom", "spark"]

我需要输出如下:

["#mavic", "#phantom", "#spark"]

我读了here,但不能回答我的问题。

4 个答案:

答案 0 :(得分:8)

您可以通过#的积极前瞻来split

var string = "#mavic#phantom#spark",
    splitted = string.split(/(?=#)/);

console.log(splitted);

答案 1 :(得分:1)

#分割字符串,然后使用reduce返回修改后的字符串

var str = "#mavic#phantom#spark";
let x = str.split("#").reduce((acc, curr) => {
  if (curr !== '') {
    acc.push('#' + curr);
  }
  return acc;
}, [])
console.log(x)

答案 2 :(得分:0)

以下是解决任务的一些非正则表达式方法:

解决方案1 ​​的经典方法-遍历字符串,并且每次找到indexOf定界符时,我们会将当前位置和下一个位置之间的子字符串推入结果数组。在else块中,有最后一个子字符串的情况-我们只需将其添加到结果数组中并中断循环即可。

const delimiter = '#';
const result1 = [];
let i = 0;
while (i < str.length) {
  const nextPosition = str.indexOf(delimiter, i+1);
  if (nextPosition > 0) {
    result1.push(str.substring(i, nextPosition));
    i = nextPosition;
  } else {
    result1.push(str.substring(i));
    break;
  }
}

解决方案2 -拆分从索引1开始的初始字符串(为了不将空字符串包含在结果数组中),然后仅通过将定界符和当前数组项连接起来即可映射结果数组。

const result2 = str.substr(1).split(delimiter).map(s => delimiter + s);

答案 3 :(得分:0)

另一种方式: 分割后过滤空元素,并将这些元素映射为以分割后的字符开头。

string.split("#").filter((elem) => elem).map((elem) => "#" + elem);