javascript i regexpy - wydobycie ciągu

0

Witam, wczoraj mój temat został przeniesiony do kosza, a pomocy nie otrzymałem. Mam następujący problem, pobieram ajaxem całą stronę i muszę z niej wydobyć zawartość tabelki:

Chciałem zrobić to w ten sposób ale niestety nie działa ;/
<php>
// t- to responseText odebrany z Ajaxa
var re = new RegExp(/<table(.*?)</table>/g);
var m = re.match(t);

Problem w tym że nie dostaję zawartości tabelki tylko wartość null. W PHP takie rozwiązanie by chyba działało a tu nie chce.

Będę wdzięczny za pomoc ;)

1

Kropka w JS nie dopasowuje znaków nowej linii. W wielu innych odmianach regexów istnieje przełącznik, który sprawia, że kropka dopasowuje również znaki nowej linii, ale w JS brakuje niestety takiego przełącznika.

Dlatego w JS-owym wyrażeniu regularnym musisz pisać: kropka LUB \n LUB \r.

BTW: nie używaj konstruktora RegExp, jeśli nie musisz. Używaj literału wyrażenia regularnego, czyli pisz po prostu:

var re = /<table(.*?)<\/table>/g;
0

Robię teraz coś takiego ale nie wiem czy to jest poprawne wyrażenie bo cały cały czas dostaje null. Może \n powinno być w []?

 
 var re = /<table class="panel">(.*?\n)<\/table>/gmi;
 var m = t.match(re);
0

Teraz masz tam w nawiasie "zero lub więcej dowolnych znaków (z wyjątkiem znaków nowej linii; znak zapytania wyłącza zachłanność operatora *), po czym jeden znak nowej nowej linii".

Miało być inaczej. Np. "dowolny znak z wyjątkiem znaków nowej linii LUB znak nowej linii (\n) LUB znak powrotu karetki (\r) i tego rodzaju znaków może być zero lub więcej":

/<table class="panel">(.|\n|\r)*<\/table>/i

Zauważ, że gwiazdka jest tu poza nawiasem.

A z zakresem znaków wyglądałoby to tak:

/<table class="panel">(.|[\n\r])*<\/table>/i
0

Już teraz rozumiem, właśnie o coś takiego mi chodziło. Dzięki wielkie za pomoc. Pozdrowionka ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1