Страницы

Поиск по вопросам

пятница, 14 февраля 2020 г.

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

#javascript #регулярные_выражения


Простейшая регулярка и я не пойму в чем ошибка. Нужно проверять что бы в строке не
было "@" 

Моя регулярка

reg = /^[^@]{3,30}$/g;


но при использовании вижу следующее



reg = /^[^@]{3,30}$/g;
console.log(reg.test('dddd')); //true
console.log(reg.test('ddddd')); //false




Как так? 
    


Ответы

Ответ 1



Как указано в справке Как и при вызове метода exec() (или при совместном с ним вызове), метод test(), вызванный несколько раз на одном и том же экземпляре регулярного выражения, будет начинать проверку с конца предыдущего сопоставления. Поэтому при следующем вызове reg.test проверка идет не с начала строки, а, в данном случае, с 4 индекса. Как указано в английском ответе это происходит из-за флага g. В случае его отсутствия работать будет ожидаемо: reg = /^[^@]{3,30}$/; console.log(reg.test('dddd')); //true console.log(reg.test('ddddd')); //false

Комментариев нет:

Отправить комментарий