2014-10-17 2 views
24

Я хотел бы разделить строку, но я хотел бы сохранить белое пространство как:JavaScript сплит Строка с пробелами

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

Как я могу продолжить, чтобы сделать это?

Спасибо!

ответ

26

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

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

Обновление: Удалены заднего пространства.

+1

Затем удалите замыкающий пробел. –

+0

Ах да, действительно. – somethinghere

+0

отлично, большое спасибо! – Jose

38

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

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

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

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

+0

Да, это действительно работает. Можете ли вы объяснить, что делает «фильтр»? На первый взгляд он кажется недействительным, так как обратный вызов 'filter' должен возвращать' true' или 'false'. –

+2

Вам не нужна эта функция фильтра ... –

6

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

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

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

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

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

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

+2

Я бы не предложил это. '\ b' не * только * совпадает между буквой и пробелом: например, она также соответствует границе между буквами и пунктуацией. «Электронная почта Боба - это [email protected]», «становится» [«Bob», «« »,« s »,« »,« e »,« - »,« mail »,« »,« is » , "", "a", "@", "b", ".", "com"] ' – Shai

+0

@Shai true, добавлена ​​также проверка пространства – Rhumborl

0

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

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

Итак:

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

Выход:

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

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

8

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

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

выход:

["hello", "my", "borthers", ";"] 
Смежные вопросы