Javascript Regex: комбинации цифр и букв (i), кроме 1

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

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

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

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

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

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

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


person Guillermo    schedule 09.06.2019    source источник
comment
const regex = /^(?:[02-9]+[a-z]|[a-z]+[02-9])[a-z02-9]*$/i? См. regex101.com/r/LqE04O/1.   -  person Wiktor Stribiżew    schedule 09.06.2019


Ответы (1)


Обратите внимание, что [^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

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

введите здесь описание изображения

Подробнее

  • ^ - начало строки
  • (?:[02-9]+[a-z]|[a-z]+[02-9]) - either of the two:
    • [02-9]+[a-z] - 1 or more digits other than 1 followed with a letter
    • | - or
    • [a-z]+[02-9] - 1 или более букв, за которыми следует цифра, отличная от 1
  • [a-z02-9]* - 0 или более букв или цифр, кроме 1
  • $ - конец строки.
person Wiktor Stribiżew    schedule 09.06.2019
comment
Какую программу вы используете для получения таких замечательных графических представлений регулярных выражений? - person Guillermo; 09.06.2019
comment
@Guillermo Все ссылки есть в ответе. См. этот сайт - person Wiktor Stribiżew; 09.06.2019