2015-11-27 3 views
-6

Мне нужно написать регулярное выражение для атрибута шаблона ввода html5 для «не является одним из следующих элементов».Regex не соответствует точно указанному списку

Как мне сделать

  • аб
  • аба
  • ба

в шаблон, который соответствует все, что не совсем один из этих слов.

Так, например, что я хочу для

  • AB - не совпадают
  • ABAB - матч
  • баб - матч
  • б - матч
  • ab a - матч

Другими словами, я хочу регулярок эквивалент (в JavaScript)

! ['ab', 'aba', 'ba'].some(x => x === term) 
+1

Просто отмените процесс, не ищите шаблон, который не совсем внутри вашего списка. Найдите их, и если вы нашли, скажите пользователю, что это неправильно. Еще лучше, когда вы нашли что-то, что вы можете сказать ему, где не так. – naurel

+2

Существует множество различных ароматов регулярных выражений; поэтому, если вы не сообщите нам, на каком языке вы будете использовать это регулярное выражение, мы не сможем дать вам ответ, который наверняка сработает для вас. Поскольку вы упомянули об этом JavaScript, я помечаю это; но узнайте, что вы могли получать downvotes, потому что вы легкомысленно отреагировали на какой язык вы использовали бы это Regex. –

+0

@GeorgeStocker, это справедливо. Как я уже сказал в своем (удаленном) комментарии, я не пометил его js, потому что Я предположил, что ответ достаточно прост, что различия в ароматах не будут иметь значения. Кроме того, я буду отмечать, что его технически html здесь, а не js. Атрибут 'pattern' использует механизм javascript, но классификация его как javascript не полностью соответствует мне. –

ответ

1

Вы можете использовать отрицательный предпросмотр с якорей:

^(?!(?:(aba|ab|ba)$)).* 

RegEx Demo

(?!(?:(aba|ab|ba)$)) - отрицательный результат, который не даст совпадения, если вход содержит exa ct слова ab или aba или ba

+0

О, я вижу - ваше использование «aba?» Смутило меня. Идти с '/^(?!. * \ B (ab | aba | ba) \ b). * $/G' –

+0

Да, я просто сократил' ab | aba' до 'aba?' – anubhava

+0

Рассматривая это сейчас, его фактически нет * совершенно * правильный. См. Мое редактирование. В принципе, он не соответствует 'ab a', который он должен, так как это не точная строка –

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