Вы не должны оценивать поисковые запросы количественно. Это непотребляющие шаблоны , то есть последовательные положительные просмотры проверяют наличие своих шаблонов, но не продвигает индекс регулярного выражения , они проверяют текст в той же позиции . Нет смысла повторять их 13 раз. ^(xyz34|xyz12)((?=.*[a-zA-Z])(?=.*[0-9])){13}
равно ^(xyz34|xyz12)(?=.*[a-zA-Z])(?=.*[0-9])
и означает, что строка может начинаться с xyz34
или xyz12
, а затем должна содержать как минимум 1 букву и как минимум 1 цифру.
Вы можете подумать об устранении проблемы используя шаблон потребляющий , например:
- Если вам все равно, содержат ли последние 13 символов только цифры или только буквы, используйте шаблоны, предложенные другими пользователями, например
/^(?:xyz34|xyz12)[a-zA-Z\d]{13}$/
или /^xyz(?:34|12)[a-zA-Z0-9]{13}$/
- Если должен быть хотя бы 1 di git и хотя бы 1 буква среди этих 13 буквенно-цифровых c символов, используйте
/^xyz(?:34|12)(?=[a-zA-Z]*\d)(?=\d*[a-zA-Z])[a-zA-Z\d]{13}$/
.
См. Демонстрацию regex # 1 и regex demo # 2 .
ПРИМЕЧАНИЕ : это литералы регулярных выражений, не используйте их внутри одинарные или двойные кавычки!
Подробности
^
- начало строки xyz
- общий префикс (?:34|12)
- соответствие группы без захвата 34
или 12
(?=[a-zA-Z]*\d)
- должно быть не менее 1 di git после любых 0+ букв справа от текущая nt location (?=\d*[a-zA-Z])
- после любых 0+ цифр справа от текущего местоположения должно быть хотя бы 1 буква [a-zA-Z\d]{13}
- 13 букв или цифр $
- конец строки.
JS демонстрация:
var strs = ['xyz34abcdefghijkl1','xyz341bcdefghijklm','xyz34abcdefghijklm','xyz341234567890123','xyz14a234567890123'];
var rx = /^xyz(?:34|12)(?=[a-zA-Z]*\d)(?=\d*[a-zA-Z])[a-zA-Z\d]{13}$/;
for (var s of strs) {
console.log(s, "=>", rx.test(s));
}