2015-05-08 5 views
2

Я пытаюсь написать этот Regex (JavaScript), чтобы соответствовать word1 и word2 (если он существует):матч/всех из нескольких слов в строке

This is a test. Here is word1 and here is word2, which may or may not exist.

Я попробовал эти:


(word1).*(word2)?

Это будет соответствовать только word1 независимо, если word2 существует или нет.


(word1).*(word2)

Это будет соответствовать оба, но только если оба существуют.


Мне нужно регулярное выражение для соответствия словам1 и word2 - которые могут или не могут существовать.

+0

Почему бы вам просто не проверить их существование индивидуально? –

ответ

9
var str = "This is a test. Here is word1 and here is word2, which may or may not exist."; 
var matches = str.match(/word1|word2/g); 
//-> ["word1", "word2"] 

String.prototype.match будет работать регулярное выражение со строкой и найти все соответствующие хиты. В этом случае мы используем alternation, чтобы позволить регулярному выражению соответствовать word1 или word2.

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

Если вам интересно сопоставлять только границы слов, используйте /\b(?:word1|word2)\b/g.

+0

Вы уверены, что это не будет соответствовать '(word) (1 | w) (ord2)'. Редактировать: Нет, вы правы. – Krycke

+0

@ Krycke - неясно, важно это или нет. Я обратился к нему в редакцию. – Phrogz

+0

Вот и все! Так тривиально, и я пропустил это. Я запутался, что '|' в regex будет означать то же самое, что и оператор '||' (или) в javascript. – Azevedo

Смежные вопросы