На самом деле, /(?=\w{6,})(?=\D*\d{2})/
не гарантирует совпадения в строке с двумя последовательными цифрами.
Проверьте это демо:
var reg = /(?=\w{6,})(?=\D*\d{2})/;
console.log(reg.test("Matches are found 12."))
console.log(reg.test("Matches are not found 1 here 12."))
Это происходит потому, что \D*
соответствует только любым нецифровым символам, и как только \w{6,}
соответствует, (?=\D*\d{2})
хочет найти две цифры после любых 0+ цифр, но это не тот случай в строке.
Таким образом, (?=\w{6,})(?=\D*\d{2})
соответствует местоположению в строке, за которым сразу следует 6 или более символов слова и любые 0+ нецифровых символа, за которыми следуют 2 цифры .
Правильное регулярное выражение для проверки, если строка содержит 6 или более символов слова и две последовательные цифры в любом месте строки:
var reg = /^(?=.*\w{6,})(?=.*\d{2})/;
Или для поддержки многострочных строк:
var reg = /^(?=[^]*\w{6,})(?=[^]*\d{2})/;
, где [^]
соответствует любому символу. Также [^]
можно заменить на [\s\S]
/ [\d\D]
или [\w\W]
.
и для сопоставления строки длиной более 5 символов и двух последовательных цифр , вы можете использовать
var reg = /^(?=.*\d{2}).{5,}$/
var reg = /^(?=[\s\S]*\d{2})[\s\S]{5,}$/
где
^
- начало строки
(?=[\s\S]*\d{2})
- в любом месте после 0+ символов должно быть две цифры справа от текущего местоположения
[\s\S]{5,}
- пять или более символов
$
- конец строки.