JavaScript split String with white space

后端 未结 7 820
隐瞒了意图╮
隐瞒了意图╮ 2020-12-08 01:56

I would like to split a String but I would like to keep white space like:

var str = \"my car is red\";

var stringArray [];

stringArray [0] = \"my\";
string         


        
相关标签:
7条回答
  • 2020-12-08 02:23

    You can just split on the word boundary using \b. See MDN

    "\b: Matches a zero-width word boundary, such as between a letter and a space."

    You should also make sure it is followed by whitespace \s. so that strings like "My car isn't red" still work:

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

    The initial \b is required to take multiple spaces into account, e.g. my car is red

    EDIT: Added grouping

    0 讨论(0)
  • 2020-12-08 02:25

    Although this is not supported by all browsers, if you use capturing parentheses inside your regular expression then the captured input is spliced into the result.

    If separator is a regular expression that contains capturing parentheses, then each time separator is matched, the results (including any undefined results) of the capturing parentheses are spliced into the output array. [reference)

    So:

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

    Output:

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

    This collapses consecutive spaces in the original input, but otherwise I can't think of any pitfalls.

    0 讨论(0)
  • 2020-12-08 02:31

    In case you're sure you have only one space between two words, you can use this one

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

    so you replace one space by two, the split by space

    0 讨论(0)
  • 2020-12-08 02:35

    You could split the string on the whitespace and then re-add it, since you know its in between every one of the entries.

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

    Update: Removed trailing space.

    0 讨论(0)
  • 2020-12-08 02:39
    str.split(' ').join('§ §').split('§');
    
    0 讨论(0)
  • 2020-12-08 02:40

    For split string by space like in Python lang, can be used:

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

    output:

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

    or similar:

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

    (output some)

    0 讨论(0)
提交回复
热议问题