【问题标题】:JavaScript split String with white spaceJavaScript 用空格分割字符串
【发布时间】:2014-12-13 01:45:57
【问题描述】:

我想拆分一个字符串,但我想保留空格,例如:

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";

我该如何继续这样做?

谢谢!

【问题讨论】:

    标签: javascript arrays split


    【解决方案1】:

    使用正则表达式:

    var str   = "my car is red";
    var stringArray = str.split(/(\s+)/);
    
    console.log(stringArray); // ["my", " ", "car", " ", "is", " ", "red"] 
    

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

    【讨论】:

    • 嗯,这确实有效。你能解释一下filter 在做什么吗?乍一看,它似乎是无效的,因为 filter 回调应该返回 truefalse
    • 你是救生员。没有其他方法适用于我的特殊情况!
    • 你可能想要: var stringArray = str.split(/\s+/);数组中没有空格。
    • @run_the_race 你能解释一下他为什么保留这些空间吗?
    • @MinhNghĩa "如果separator是一个包含捕获括号()的正则表达式,则匹配的结果包含在数组中。"
    【解决方案2】:

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

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

    更新:删除尾随空格。

    【讨论】:

    • 然后删除尾随空格。
    • 这对双空格根本不起作用。 "text to split" ("text to" 之间有 2 个空格) => ["text", " ", "", " ", "to", " ", "split"]
    • @Rhumborl 不,它没有,你可以将它内置,但它会按照它在锡上所说的那样做。自然文本不包含双空格。但是,如果您愿意,可以在循环开头添加 if(string[i] === "") continue; 以忽略任何空值。
    【解决方案3】:

    对于像 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)
    

    (输出一些)

    【讨论】:

    • w.split(/(\s+)/).filter( e =&gt; e.length &gt; 1)
    • 前面的评论有误。 'a boy'.split(/(\s+)/).filter( e => e.length > 1) 给出 ["boy"]
    【解决方案4】:

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

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

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

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

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

    编辑:添加分组

    【讨论】:

    • 我不建议这样做。 \b匹配字母和空格:例如,它还匹配字母和标点符号之间的边界。 "Bob's e-mail is a@b.com" 变为 ["Bob", "'", "s", " ", "e", "-", "mail", " ", "is", " ", "a", "@", "b", ".", "com"]
    • @Shai true,也添加了空格检查
    【解决方案5】:

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

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

    所以:

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

    输出:

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

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

    【讨论】:

      【解决方案6】:
      str.split(' ').join('§ §').split('§');
      

      【讨论】:

        【解决方案7】:

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

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

        所以你用两个替换一个空格,用空格分割

        【讨论】:

          猜你喜欢
          • 2012-09-22
          • 2013-08-02
          • 2023-04-02
          • 2013-10-11
          • 1970-01-01
          • 2012-04-22
          • 2020-05-16
          • 1970-01-01
          • 2012-02-14
          相关资源
          最近更新 更多