Могу ли я использовать регулярные выражения со страницей, которые получают из функции ajax ()? - PullRequest
1 голос
/ 02 февраля 2011

Я хочу получить тэг marquee на какой-то странице.
Это мой код

var myurl = "http://www.somewhere.com/somepage.html";
var patt = /.+<marquee.+>(.+)<\/marquee>.+/;

$.ajax({
    url: myurl,
    success: function(data){
        var r = patt.exec(data);
        console.debug(r[1]);
    },
});

Я обнаружил, что переменная r равна нулю.
В чем моя ошибка?

PS. Я делаю расширение Chrome, поэтому оно позволяет мне вызывать ajax () в другом домене.

Ответы [ 2 ]

0 голосов
/ 02 февраля 2011

Возможно, вам лучше извлечь текст, используя конструкторы элементов jQuery, а не манипуляции со строками.Он более надежен и его легче читать:

var r = $('<div>' + data + '</div>').find('marquee').html();

Оберточный div предназначен для того, чтобы jQuery обрабатывал данные как элементы HTML, а не как строку селектора.

0 голосов
/ 02 февраля 2011

Есть много причин, по которым мы не разбираем HTML с помощью регулярных выражений, и я не буду здесь вдаваться.

В вашем случае, я подозреваю, что внутри тега <marquee> могут быть новые строки, которым не может соответствовать ваше регулярное выражение.

Попробуйте

/<marquee[^>]*>([\s\S]*?)<\/marquee>/

и посмотрите, чтослучается.

[\s\S] соответствует любому символу (пробел или непробел, пробел, чтобы компенсировать отсутствие скриптов JavaScripts в режиме «точка соответствует всем»), *? позволяет совпадению происходить любое количество раз, но как можно меньше, поэтому мы не сопоставляем несколько тегов <marquee>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...