Javascript Regex: комбинации цифр и букв (I), кроме 1 - PullRequest
2 голосов
/ 09 июня 2019

Я пишу регулярное выражение, которое должно соответствовать следующему предикату:

Комбинация букв и цифр, кроме числа 1.

Например: TRS234, A2B3C4, 2A3B4C, 223GFG

Я придумал это регулярное выражение:

const regex = /^(?:[^1]+[a-z]|[a-z]+[^1])[a-z][^1]*$/i

Это соответствует почти каждому случаю, кроме 2A3B4C, я проводил много исследований, но не понимаю, почемуэто не работает для этого конкретного случая.Будем весьма благодарны за любую помощь или предложения по улучшению регулярного выражения.

Заранее спасибо!

1 Ответ

1 голос
/ 09 июня 2019

Обратите внимание, что [^1] соответствует любому символу, кроме 1, то есть он также соответствует §, ł и т. Д. Кроме того, [a-z][^1]* соответствует букве, за которой следуют любые 0+ символов, кроме 1, поэтому регулярное выражение не проверяет ожидаемый шаблон строки.

Вы можете использовать

const regex = /^(?:[02-9]+[a-z]|[a-z]+[02-9])[a-z02-9]*$/i

Или, вариант:

const regex = /^(?=[a-z02-9]*$)(?:\d+[a-z]|[a-z]+\d)[a-z\d]*$/i

См. Демонстрационную версию регулярных выражений и график регулярных выражений :

enter image description here

подробности

  • ^ - начало строки
  • (?:[02-9]+[a-z]|[a-z]+[02-9]) - любой из двух:
    • [02-9]+[a-z] - 1 или более цифр, отличных от 1, за которыми следует буква
    • | - или
    • [a-z]+[02-9] - 1 или более букв, за которыми следует цифра, отличная от 1
  • [a-z02-9]* - 0 или более букв или цифр, отличных от 1
  • $ - конец строки.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...