А если регулярке будут отдаваться символы кириллицей и между словами могут идти символы которые не являются буквами. Также нужно учитывать регистр, что тоже не мало важно.
Иван Соломенников: Поставьте более точно условие задачи, какие символы относятся к словам (кириллица, латиница, другие алфавиты, цифры и т.д.). Вот вариант для букв кириллицы и латиницы:
str.match(/[A-Za-zА-Яа-яЁё]+/g)
Alexey: Задачу поставил автор поста:
>>>В str может быть всё что угодно, это ввод пользователя.
Поэтому ваша регулярка не отработает. а) Когда будут символы не относящиеся к буквам латиницы и кириллицы. б) В том случае если слово будет начинаться с заглавной или полностью быть капсом. в) Также могут присутствовать и цифры, которые тоже не нужны.
Вторая регулярка уже лучше, но можно диапазон задать проще [a-zа-я] и установить флаг ignoreCase.
Вот именно, автор только написал, что >>>В str может быть всё что угодно, это ввод пользователя
Но не указал какие символы относятся к словам.
По поводу регулярки, согласен, можно упростить. Но у вас там ошибки, забыли многострадальную 'ё' (если мы говорим только о символах латиницы и кириллицы), а также в массиве будут пустые элементы, в случае пробелов в начале и конце.
Вот эти два варианта, будут практически эквивалентны:
str.trim().split(/[^a-zа-яё]+/gi);
str.match(/[a-zа-яё]+/ig);
Отличия будут при пустой (пробельной) строке
Первый вернет массив с одним пустым элементом [""]
Второй - null
Эквивалентные варианты:
// 1
res = str.trim().split(/[^a-zа-яё]+/gi);
if (res[0] === '') res = [];
// 2
res = str.match(/[a-zа-яё]+/ig) || [];
Alexey: Да, моя ошибка. Не сказал какие символы входят в понятие "слово". Хотя интересно было почитать и ваши мысли на этот счёт. В моём нестандартном случае в понятие "слово" входят семь языков, включая китайский и как минимум все печатные символы, поэтому думаю проще дробить строки на слова используя уже готовую \s где и табы, и даже монгольские пробелы.