Разделение 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";
Как я могу это сделать?
Спасибо!
Ответы
Ответ 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('§');