2012-11-28 2 views
0

Я хочу разделить строку текста пробелами (т. Е. Избавиться от всех пробелов и оставить остальных в виде отдельных элементов). У меня есть этот код:Разделение текста в JS пробелами

line.split(/\s+/); 

но он не работает точно, как я хочу. Например, hi there! делится на: [привет, там !,] (обратите внимание на 1 пустой элемент в конце массива). Как разделить строку без этого последнего пустого элемента?

+1

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

ответ

4

Вы уверены, что в конце строки нет свободного места? Потому что это работает для меня.

В любом случае, попробуйте следующее:

line.replace(/^\s+|\s+$/g,'').split(/\s+/); 

Это позволит удалить пробелы из начала и конца строки перед расщеплением.

+0

Как я подозревал, проблема была в кодировке EOL в стиле Windows. У меня не было пробелов в конце полосы, но '\ r' образовал последний« пустой »элемент. В любом случае, ваше решение является универсальным (работает как с окнами, так и с кодировками в стиле unix), так что это то, что я искал. Спасибо! – NPS

+0

Просто интересно - есть ли причина, почему вы используете 'g' mod при использовании'^$ '? Возможно, я неправильно понимаю использование – Ian

+0

Если строка имеет пробелы в начале и в конце, это два отдельных совпадения регулярного выражения, и оба они нуждаются в замене. Отсюда и необходимость 'g'. –

-1

Почему бы просто не использовать

line.split(' '); 

он расщепляется "Привет!" в

["hi", "there!"] 
+1

Поскольку несколько последовательных пробелов приводят к пустым элементам массива. –

+0

'' hi there! ". Split (''); ["hi", "", "", "there!"] ' –

+0

@MichaelBerkowski - ах да, недосмотр с моей стороны! – bPratik

2

вызова .trim() до разделения строки, он будет удалять пробелы до и после строки

+1

'.trim()' является ES5 и [еще не полностью поддерживается] (https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/Trim) –

+0

AFAIK javascript не имеет нативная реализация 'trim()' еще! – bPratik

+0

@MichaelBerkowski IE8 получает ES5-shim через условный комментарий. Теперь давайте используем API ES5, ради пользы: P' –

2
line.trim().split(/\s+/); 

Это должно делать то, что вы хотите.

+0

Достаточно честный. Тем не менее, это имеет место в современных браузерах. –

+0

Извините, просто просмотрел его, должен работать на все, что я хочу использовать в качестве браузера (и, к черту, с IE8) +1 – Amadan

+0

Очень хорошая публикация о том, как добавить его тоже. http://stackoverflow.com/questions/498970/how-do-i-trim-a-string-in-javascript –

0

Не было бы проще сделать

line.match(/\S+/g); // => ["hi", "there!"] 
Смежные вопросы