我有一个字符串,需要用某个定界符分割并转换为数组,但不删除定界符本身。 例如,考虑以下代码:
var str = "#mavic#phantom#spark";
str.split("#") //["", "mavic", "phantom", "spark"]
我需要输出如下:
["#mavic", "#phantom", "#spark"]
我读了here,但不能回答我的问题。
答案 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);