Regex - принять букву, цифру, подчеркивание, но не принимать конкретную строку - PullRequest
0 голосов
/ 16 мая 2018

Я пытаюсь создать регулярное выражение, которое должно принимать букву, цифру, подчеркивание, но не должно принимать нечувствительный ввод www.

Это означает, что вводом может быть wwwblabla или blablawww или любое слово, содержащее www, но оно может быть только www. Есть ли возможность сделать такое регулярное выражение?

У меня есть выражение для цифры, буквы, undesorcore, но я не знаю, как связать условие www: /(^[a-zA-Z0-9_+]$/

Ответы [ 2 ]

0 голосов
/ 16 мая 2018

Я не думаю, что есть способ достичь этого в одном регулярном выражении. Вместо этого я предлагаю использовать концепцию белого и черного списков.

Как уже упоминалось, \w эквивалентно [A-Za-z0-9_]. Вы также можете сопоставить границу слова (\b) вместо начала и конца строки.

Белый / черный список может быть отдельной строкой или регулярным выражением, в зависимости от ваших требований.

псевдокод:

if regex(string, pattern = whitelist) and string != blacklist

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

Редактировать: Если вы соответствуете по одному слову в строке, отрицательный прогноз работает. Похоже, что вы делали в своем выражении, так что не обращайте на это внимания.

0 голосов
/ 16 мая 2018

Для количественного определения класса символов вы помещаете квантификатор вне его, и если вы хотите захватить что-то, вы должны закрыть открывающую скобку.

С отрицательным прогнозом вы можете исключить www из матчей:

^(?!www$)\w+$
  • \w => [a-zA-Z0-9_]

Демонстрационная версия

...