JavaScript分裂字符串与空格

时间:2014-10-17 13:02:24

标签: 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";

我该如何继续这样做?

谢谢!

7 个答案:

答案 0 :(得分:55)

使用正则表达式:

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

console.log(stringArray); // ["my", " ", "car", " ", "is", " ", "red"] 

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

答案 1 :(得分:39)

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

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(" ");
    }
}

更新:删除了尾随空格。

答案 2 :(得分:15)

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

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

输出:

   ["hello", "my", "brothers", ";"]

或类似:

   w.split(/(\s+)/).filter( e => e.trim().length > 0)

(输出一些)

答案 3 :(得分:7)

您可以使用\b拆分单词边界。见MDN

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

您还应该确保后面跟着空格\s。所以像"My car isn't red"这样的字符串仍然有效:

var stringArray = str.split(/\b(\s)/);

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

编辑:添加分组

答案 4 :(得分:3)

str.split(' ').join('§ §').split('§');

答案 5 :(得分:1)

虽然并非所有浏览器都支持此功能,但如果在正则表达式中使用捕获括号,则捕获的输入会拼接到结果中。

  

如果separator是包含捕获括号的正则表达式,则每次匹配时,捕获括号的结果(包括任何未定义的结果)都会拼接到输出数组中。 [reference

所以:

var stringArray = str.split(/(\s+)/);
                             ^   ^
//

输出:

["my", " ", "car", " ", "is", " ", "red"]

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

答案 6 :(得分:0)

如果您确定两个单词之间只有一个空格,则可以使用这个

str.replace(/\s+/g, ' ').split(' ')

所以您将一个空格替换为两个,然后按空格分割