Я хочу, чтобы регулярное выражение соответствовало символам az или 0-9 любой длины, любого порядка или точной строки N/A.
Совпадающие и несовпадающие примеры приведены ниже:
N/A
- совпадение
asd6fg
- совпадение
123asd
- совпадение
asd234
- совпадение
12sd23
- совпадение
as23fd
- совпадение
NA
- не совпадает
N/AN/A
- не соответствует
N/
- не соответствует
N
- не соответствует
123N/A
- не соответствует
abcN/A
- не соответствует
a1bN/A
- не соответствует
N/Aab2
- не совпадает
AS123
- не соответствует
Это должно сделать это:
^(?:[a-z\d]+|N/A)$
^
указывает на начало ввода, (?:...)
создает группу без захвата; тогда либо [all lowercase letters and \digits]+
, либо |
N/A
совпадают. $
отмечает конец ввода
Если вы используете группу захвата, как в ответе @Michael_M, совпавшая подстрока будет храниться в памяти, и вы сможете ссылаться на нее в том же регулярном выражении или в результирующем массиве совпадений. См. MDN для справки. Если вы запустите его на большом наборе данных, потеря производительности может стать ощутимой. В этом случае лучше использовать группу без захвата, которая выполняет работу по группировке, не занимая лишней памяти.
Просто используйте это:
^([a-z0-9]+|N/A)$
Объяснение:
^
и $
говорят о начале и конце строки соответственно. Помещая их в конце регулярного выражения, вы говорите, что оно должно совпадать только в том случае, если оно может совпасть со всем. Это все или ничего.[a-z0-9]+
будет соответствовать az и 0-9 один или несколько раз.|
— логическое ИЛИ. Он будет соответствовать либо тому, что было перед ним ([a-z0-9]+
), либо тому, что было после него, что...N/A
что является точной строкой «Н/Д». Вам нужно сбежать от этого /
персонажа.Пример:
const regex = /^([a-z0-9]+|N/A)$/;
// match
console.info(regex.test('N/A'));
console.info(regex.test('123abc'));
console.info(regex.test('abc123'));
// don't match
console.info(regex.test('N/AN/A'));
console.info(regex.test('123ABC'));
console.info(regex.test('ABC123'));
что такое группа без захвата? означает ли это, что не захватывайте оба, а просто захватывайте один из обоих?