JS string.split()没有删除分隔符

Mar*_*zek 48 javascript split delimiter

如何在不删除分隔符的情况下拆分字符串?

假设我有一个字符串: var string = "abcdeabcde";

当我这样做时 var newstring = string.split("d"),我得到这样的东西:

["abc","eabc","e"]

但我想得到这个:

["abc","d","eabc","d","e"]

当我尝试做我的"split2"功能时,我把所有纠结在splice()和索引以及"this"vs"that"和...... aargh!救命!:d

Kai*_*Kai 48

尝试:

"abcdeabcde".split(/(d)/);
Run Code Online (Sandbox Code Playgroud)

  • OP没有指定环境是否是浏览器 (5认同)
  • 这应该是公认的答案:它更简单、更安全,而且最近很少需要 IE (4认同)
  • 请注意,由于 JScript 错误,这在 IE 中不起作用。 (2认同)
  • @MikeAono:/sf/answers/3172660081/,使用正则表达式`/(?= d)/ g` (2认同)

Inf*_*ner 21

试试这个:

  1. 将所有"d"实例替换为",d"
  2. 按","拆分
var string = "abcdeabcde";
var newstringreplaced = string.replace(/d/gi, ",d");
var newstring = newstringreplaced.split(",");
return newstring;
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.

  • 原始字符串中的任何`,`都会失败. (26认同)
  • "abcdeabcde" .split(/(d)/); (13认同)
  • 你的解决方案有一个错误 - 当我用",d"而不是",d"替换实例时它会起作用.好主意!接受因为简单:) (4认同)

mic*_*cha 19

我喜欢Kai的答案,但它不完整.而是使用:

"abcdeabcde".split(/(?=d)/g) //-> ["abc", "deabc", "de"]
Run Code Online (Sandbox Code Playgroud)

这是在正则表达式中使用Lookahead Zero-Length Assertion,这使得匹配不是捕获组的一部分.不需要其他技巧或变通方法.

  • @forresst @JoachimLous 您可以使用后向方法,这也在 micha 链接的页面上进行了描述。例如: `"abcdeabcde".split(/(?<=d)/g)` (5认同)
  • 有没有办法得到这个结果: //-> ["abcd", "eabcd", "e"] (2认同)

bob*_*nce 18

var parts= string.split('d');
for (var i= parts.length; i-->1;)
    parts.splice(i, 0, 'd');
Run Code Online (Sandbox Code Playgroud)

(反向循环是必要的,以避免将ds 添加到已经d插入的列表部分.)

  • 加一个用于``` - >```运算符:D (5认同)
  • [“-->”运算符的名称是什么](http://stackoverflow.com/q/1642028/1529630) (4认同)

小智 8

可以在一行中完成:

var string = "abcdeabcde";    
string.split(/(d)/);
["abc", "d", "eabc", "d", "e"]
Run Code Online (Sandbox Code Playgroud)

  • 此解决方案已发布[此处](http://stackoverflow.com/a/4514223/1974224) (6认同)
  • @MikeAono:/sf/answers/3172660081/,使用正则表达式`/(?= d)/ g` (2认同)

udn*_*n79 5

split - split用于创建不用于搜索的单独行.

[^ d] - 找到一组不包含"d"的子串

var str = "abcdeabcde";

str.match(/[^d]+|d/g)         // ["abc", "d", "eabc", "d", "e"]
or
str.match(/[^d]+/g)           // ["abc", "eabc", "e"]
or
str.match(/[^d]*/g)           // ["abc", "", "eabc", "", "e", ""]
Run Code Online (Sandbox Code Playgroud)

如果您不想要"javascript"问题,请阅读"RegExp对象".