Как сделать необязательную группу, но если группа существует больше всего совпадает с моим регулярным выражением? - PullRequest
0 голосов
/ 03 мая 2018

У меня есть это регулярное выражение JS:

var re = /(\w\w\d-{1})?\w\w-{1}\w-{1}?/;

Для имени файла и первая группа должна быть необязательной:

Полный пример имени. Пример:

qq8-qq-q-anything => OK

Без первой группы:

qq-q-anything => OK

Но если я что-то положил, все равно сработало:

что-нибудь-qq-q-что-нибудь => ОК

Я хочу, чтобы первая группа была опциональной, но если имя файла имеет первую группу, оно должно совпадать с моим регулярным выражением слова wor.

Ответы [ 2 ]

0 голосов
/ 04 мая 2018

\w соответствует как цифрам, так и буквам. Он также включает в себя символ _. Вы должны явно использовать символьный класс для букв и закрепить свое регулярное выражение с помощью circleflex ^, чтобы подтвердить начало входной строки. Вам также не нужно иметь квантификатор {1}, поскольку предыдущий шаблон проверяется только один раз, если не указано иное. Вам также может понадобиться флаг i (без учета регистра):

var re = /^(?:[a-z]{2}\d-)?[a-z]{2}-[a-z]-/i;

Живая демоверсия

0 голосов
/ 04 мая 2018

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

const re = /^(\w\w\d-{1})?\w\w-{1}\w-{1}?/;

const strs = ['qq8-qq-q-anything', 'qq-q-anything', 'anything-qq-q-anything'];


const result = strs.map(str => re.test(str));

console.log(result);
...