Регулярные выражения Javascript - бесконечный цикл exec - PullRequest
7 голосов
/ 20 мая 2009

Я пытаюсь получить текст ссылки с помощью регулярных выражений. возможно, есть несколько ссылок, которые могут соответствовать шаблону, и я хочу получить самую дальнюю ссылку до 4го числа. Вот мой код JS:

var level=1;
while ( _match = /<a href="http:\/\/www.mysite.com\/x\/(?:.*)>(.*)<\/a>/img.exec(_html)){
    if (level < 5)  (_anchor_text=_match[1]);
    level ++;
}

Проблема в том, что этот код входит в бесконечный цикл в IE (хорошо работает в FF), хотя шаблон существует. Любая помощь приветствуется.

1 Ответ

9 голосов
/ 20 мая 2009

RegExp.exec, я полагаю, использует свойство lastIndex и постоянно изменяет его, чтобы сделать возможными такие вещи, как "захват глобальной группы" ; чтобы это работало, вам нужно иметь одно регулярное выражение. В настоящее время вы создаете новый на каждой итерации, чтобы он не работал ...

Попробуйте это:

var level = 1;
var pattern = /<a href="http:\/\/www.mysite.com\/x\/(?:.*)>(.*)<\/a>/img;
var _match;
while ( _match = pattern.exec(_html)){
     if (level < 5)  (_anchor_text=_match[1]);
     level ++;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...