JavaScript分裂字符串与空格

Jos*_*ose 41 javascript arrays split

我想分割一个字符串,但我想保持白色空间像:

var str = "my car is red";

var stringArray [];

stringArray [0] = "my";
stringArray [1] = " ";
stringArray [2] = "car";
stringArray [3] = " ";
stringArray [4] = "is";
stringArray [5] = " ";
stringArray [6] = "red";
Run Code Online (Sandbox Code Playgroud)

我该怎么做呢?

谢谢 !

chr*_*dam 64

使用正则表达式:

var str   = "my car is red";
var stringArray = str.split(/(\s+)/);

console.log(stringArray); // ["my", " ", "car", " ", "is", " ", "red"] 
Run Code Online (Sandbox Code Playgroud)

\s 匹配任何一个空白字符,添加加号使其变得贪婪,匹配以字符开头并以空格结尾的组,并且当空格后面有字符时,下一组开始.

  • 您可能想要: var stringArray = str.split(/\s+/); 数组中没有空格。 (10认同)
  • 你是一个救星。对于我的具体情况,没有其他方法有效! (2认同)
  • @MinhNghĩa“如果分隔符是包含捕获括号 () 的正则表达式,则匹配的结果将包含在数组中。” (2认同)

som*_*ere 43

您可以在空格上拆分字符串,然后重新添加它,因为您知道它在每个条目之间.

var string = "text to split";
    string = string.split(" ");
var stringArray = new Array();
for(var i =0; i < string.length; i++){
    stringArray.push(string[i]);
    if(i != string.length-1){
        stringArray.push(" ");
    }
}
Run Code Online (Sandbox Code Playgroud)

更新:删除尾随空格.


Dmi*_*pov 22

对于像Python一样的空格分割字符串,可以使用:

   var w = "hello    my brothers    ;";
   w.split(/(\s+)/).filter( function(e) { return e.trim().length > 0; } );
Run Code Online (Sandbox Code Playgroud)

输出:

   ["hello", "my", "brothers", ";"]
Run Code Online (Sandbox Code Playgroud)

  • 之前的评论是错误的。'a boy'.split(/(\s+)/).filter( e =&gt; e.length &gt; 1) 给出 ["boy"] (4认同)

Rhu*_*orl 8

您可以使用分割单词边界\b.见MDN

"\ b:匹配零宽度字边界,例如字母和空格之间."

您还应该确保它后跟空格\s.所以字符串"My car isn't red"仍然有用:

var stringArray = str.split(/\b(\s)/);
Run Code Online (Sandbox Code Playgroud)

初始化\b需要考虑多个空间,例如my car is red

编辑:添加分组

  • 我不建议这样做.`\ b`不仅*在字母和空格之间匹配:例如,它还匹配字母和标点符号之间的边界.`"Bob的电子邮件是a@b.com"`变成`["Bob","'","s","","e"," - ","mail","","是" ,"","a","@","b",".","com"]` (2认同)

Lig*_*ica 5

尽管并非所有浏览器都支持这种方式,但如果您在正则表达式中使用捕获括号,则捕获的输入将拼接到结果中。

如果separator是一个包含捕获括号的正则表达式,那么每次匹配separator时,将捕获括号的结果(包括任何未定义的结果)拼接到输出数组中。[参考]

所以:

var stringArray = str.split(/(\s+)/);
                             ^   ^
//
Run Code Online (Sandbox Code Playgroud)

输出:

["my", " ", "car", " ", "is", " ", "red"]
Run Code Online (Sandbox Code Playgroud)

这会折叠原始输入中的连续空格,但除此之外我想不出任何陷阱。