Я выполняю итерацию по ссылкам и выбираю, что мне нужно по регулярному выражению.JavaScript: разные результаты теста регулярного выражения внутри и снаружи
var str = "http://([^.]*).time.com/($|(page/\d/))";
var reg = new RegExp(str); var arr = [], l = document.links;
for(var i=0; i<l.length; i++) {
console.log(l[i].href + '\t\t\t-' + reg.test(l[i].href));
}
>...
>http://newsfeed.time.com/page/3/ -false
>...
Но:
/http:\/\/([^.]*).time.com\/($|(page\/\d\/))/.test('http://newsfeed.time.com/page/3/')
>true
Что я делаю неправильно? :) Спасибо.
Зачем использовать конструктор регулярных выражений с постоянной строкой? Просто используйте литерал regexp, как вы использовали в консоли. – Musa
В несвязанной заметке вам также нужно избежать символов '.' В регулярном выражении. Опять же, это две обратные косые черты в строковых литералах, одна в регулярных выражениях. (За исключением того, что для первого '.' Не требуется экранирование, потому что оно находится в символьном классе, поэтому правила разные.) NB: Маленькие вещи, подобные этому, иногда могут поставить под угрозу безопасность. Например, если ваш код предполагает, что любой URL-адрес, соответствующий этому регулярному выражению, заслуживает доверия, злоумышленник может обойти его, зарегистрировав URL-адрес 'http: // my-malicious-url-time.com /', который соответствует регулярному выражению, он написал это. –