Соответствует одному символу Regex, который находится в определенном диапазоне - PullRequest
0 голосов
/ 06 декабря 2018

Кажется довольно простым, но я не могу найти, как это сделать.Я хочу сопоставить один символ в определенном диапазоне, скажем, от a до z.

[az]

В настоящее время выполняются следующие действия:

const regex = RegExp('[a-z]');
console.warn('TEST', regex.test('a'))

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

  • a должен пройти
  • b должен пройти
  • ab должен выйти из строя
  • aa долженсбой
  • abcdefg сбой

Вы поняли идею.

Я пробовал несколько вариантов, таких как L

[{1} az]

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

1 Ответ

0 голосов
/ 06 декабря 2018

Закрепите строку, используя ^ и $, которые соответствуют "началу строки" и "концу строки", соответственно.

Ваше регулярное выражение будет ^[a-z]$, что означает, что вы ожидаете совпадения с одним символом от a до z, и этот единственный символ должен соответствовать всей строке.

Причина, по которой [a-z]{1} (что эквивалентно [a-z]) не работает, заключается в том, что вы можете сопоставлять отдельные символы по всей строке.Начало / конец строки не «закреплены».

let str = ['a','b','ab','aa','abcdefg'];
const regex = /^[a-z]$/;
str.forEach(w => console.warn(w, regex.test(w)));

Кстати, [{1}a-z] не делает то, что вы думаете, что он делает.Вы намеревались соответствовать одному буквенному символу, но это добавляет еще три символа в список совпадений, который становится:

  • az
  • {
  • }
  • 1.

Я думаю, вы имели в виду [a-z]{1}, что, как отмечалось ранее, эквивалентно [a-z].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...