2016-05-27 4 views
0

Я пытаюсь выделить целые слова из строки без пробелов или специальных символов.JavaScript Regex для создания массива целых слов.

Так от

'(votes + downvotes)/views' 

Я хотел бы создать массив как следующий

['votes', 'downvotes, 'views'] 

Пытались следующее, но ловя скобки и некоторые пробелы. https://regex101.com/r/yX9iW8/1

+0

Это просто строка в вашем примере или в других местах? Ожидаются ли цифры на входе? Если да, то хотите ли вы относиться к ним как к «словам»? – smcd

+0

Im раскалывает числа и операторы в свои собственные массивы с другим совпадением. – shaunix

ответ

1

Вы можете использовать \W+ разделить на всех не-слово

'(votes + downvotes)/views'.split(/\W+/g).filter(x => x !== ''); 
// ["votes", "downvotes", "views"] 

Или \w+, чтобы соответствовать все символы слова

'(votes + downvotes)/views'.match(/\w+/g); 
// ["votes", "downvotes", "views"] 
+0

Спасибо, Пол, это отлично поработало. Как только я смогу принять ответ, я это сделаю. – shaunix

+0

Еще лучшим вариантом будет '.filter (x => x)' –

+0

@ Рихард Хамильтон подумал об этом, решил, что мне не очень удобно с ним в фильтре. Если вам нужна более короткая стенография, либо 'Boolean', либо' x => !! x' будет лучше со мной работать [2, undefined, 1, 'a', '', false, null] .filter (Boolean); // [2, 1, "a"] ' –

2

Вы можете использовать /\w+/g как регулярные выражения в сочетании с String#match

var array = '(votes + downvotes)/views'.match(/\w+/g); 
 
console.log(array);

0

Это очень просто ...

var matches = '(votes + downvotes)/views'.match(/[a-z]+/ig); 

Вы должны решить для вашего проекта, какие символы Сделайте слова, и мин-длина слова. Это могут быть символы с цифрами и тире с минимальной длиной 3 символа ...

[a-z0-9-]{3,} 

Удачи!