2015-08-11 2 views
1

у меня есть этот список:Js тест регулярное выражение, за исключением строки

tests.skills 
tests.instructions 
tests.something 

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

var str = 'tests.instructions'; 
if(/tests\.[^skills].+/ig.test(str)) { 
     console.log(1); 
    } 

Но это не сработает, как я могу проверить это?

ответ

2
/tests\.(?!skills).+/ 

Множество отрицанием [^x] будет пытаться соответствовать символу, который не x. Что [^skills] на самом деле означает соответствует одиночному символу, который не является s или k или i или l или l или s.

Вместо этого negative lookahead(?!sequence) выполнит эту работу.

+0

Вы можете объяснить, что делает ваше регулярное выражение? – user233232

+0

@ user233232, я думаю, вы уже знаете все, кроме части '(?!)'. Это называется негативным взглядом. В основном, то, что он делает, совпадает с пустой строкой, если то, что следует в текущей позиции, не является «навыками» и в противном случае не соответствует всему совпадению. – ndn

1

Вы также можете попробовать:

tests\.(?:instructions|something) 

Это означает: поиск tests. текста, за которым следует instructionsилиsomething.

Regex live here.

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