Подтвердить что ты не робот

Разделение JavaScript Строка с пробелом

Я хотел бы разбить String, но я хотел бы сохранить пробел, например:

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

Как я могу это сделать?

Спасибо!

4b9b3361

Ответ 1

Вы можете разбить строку на пробел и затем повторно добавить ее, так как вы знаете ее между каждой из записей.

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

Использование регулярного выражения:

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

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

\s соответствует любому символу, который является пробелом, добавление плюса делает его жадным, соответствует группе, начинающейся с символов, и заканчивается пробелом, а следующая группа начинается, когда после пробела есть символ и т.д.

Ответ 3

Для разделения строки по пробелу, как в языке Python, можно использовать:

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

выход:

   ["hello", "my", "borthers", ";"]

Ответ 4

Вы можете просто разбить границу слова, используя \b. См. MDN

"\ b: Соответствует границе слова нулевой ширины, например, между буквой и пробелом.

Вы также должны убедиться, что за ним следуют пробелы \s. так что строки, такие как "My car isn't red", все еще работают:

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

Первоначальный \b требуется учитывать несколько пробелов, например. my car is red

EDIT: добавлена ​​группировка

Ответ 5

Хотя это не поддерживается всеми браузерами, если вы используете скобки для скобок внутри вашего обычного выражения, тогда захваченный вход сплавляется в результат.

Если разделитель является регулярным выражением, содержащим скобки для скобок, то каждый раз, когда разделитель времени сопоставляется, результаты (включая любые undefined результаты) скобок для записи объединяются в выходной массив. [reference)

Итак:

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

Вывод:

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

Это сбивает последовательные пробелы в исходном входе, но в остальном я не могу думать о каких-либо подводных камнях.

Ответ 6

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