2010-04-12 20 views

Odpowiedz

9

Lazyanno,

wtedy i tylko wtedy:

  1. masz czytać SLaks „s zakładać (jak a także previous article he links to) i
  2. pełni zrozumieć liczne i cudownych sposobów w którym wydobywania informacji z HTML przy użyciu wyrażeń regularnych może złamać i
  3. jesteś pewni, że żadna z obaw stosować w przypadku (np można zagwarantować, że wejście nie będzie zawierać zagnieżdżone, niedopasowane itp <b>/</b> tagi lub wystąpienia <b> lub </b> ciągu <script>...</script> lub komentarz <!-- .. --> tagi, etc.)
  4. ty absolutnie pozytywnie i chce kontynuować regularne wydobycie ekspresji

... następnie użyć:

var str = "aa<b>1;2'3</b>hh<b>aaa</b>..\n.<b>bbb</b>\nblabla.."; 

var match, result = "", regex = /<b>(.*?)<\/b>/ig; 
while (match = regex.exec(str)) { result += match[1]; } 

alert(result); 

Produkuje:

1;2'3aaabbb 
+0

fajnie !!! dziękuję! :)))) – Koerr

+0

@lazyanno, przed wybraniem rozwiązania regex lub DOM (w oparciu o kryteria wydajności), upewnij się, że ** czas zarówno ** (** parsuj "reprezentacyjny" ciąg ** z obiema metodami kilka razy, w pętli i zobacz, co ** rzeczywisty czas ** w ** różnych przeglądarkach **.) – vladr

8

You cannot parse HTML using regular expressions.

Zamiast tego należy użyć DOM w JavaScript.

na przykład (jQuery)

var text = ""; 
$('<div>' + htmlSource + '</div>') 
    .find('b') 
    .each(function() { text += $(this).text(); }); 

I owinąć HTML w <div> znaczniku znaleźć zarówno zagnieżdżone, a nie zagnieżdżonej <b> elementy.

+0

1732348 to PUS WZ 42.odpowiada na ogromną liczbę pytań. upvoting dla niego zaczyna czuć się głupio, ale do licha, to nie przestanie być prawdziwe w najbliższym czasie ... –

+3

Dla rekordu, nie możesz ** niezawodnie ** parsować HTML używając wyrażeń regularnych. Jeśli spełnione są określone warunki, informacje można * wyodrębnić * dobrze z dobrze sformułowanego (X) HTML z wyrażeń regularnych. – vladr

+0

Chcę używać regex javascript, aby uzyskać wynik Nie lubię analizować HTML (to powoli) jakikolwiek inny pomysł? dzięki :) – Koerr

2

Oto przykład bez uzależnienia jQuery:

// get all elements with a certain tag name 
var b = document.getElementsByTagName("B"); 

// map() executes a function on each array member and 
// builds a new array from the function results... 
var text = b.map(function(element) { 
    // ...in this case we are interested in the element text 
    if (typeof element.textContent != "undefined") 
    return element.textContent; // standards compliant browsers 
    else 
    return element.innerText; // IE 
}); 

// now that we have an array of strings, we can join it 
var result = text.join(''); 
+0

Nie sądzę, że jego kod HTML znajduje się w DOM. – SLaks

+0

@SLaks: Hm ... Powiedział "treść strony:" w swoim poście. – Tomalak

+0

Przeczytaj swój komentarz do mojej odpowiedzi. – SLaks

2
 var regex = /(<([^>]+)>)/ig; 
     var bdy="aa<b>1;2'3</b>hh<b>aaa</b>..\n.<b>bbb</b>\nblabla.."; 

     var result =bdy.replace(regex, ""); 
     alert(result) ; 

Patrz: '?' http://jsfiddle.net/abdennour/gJ64g/

+0

ten działa dla każdego tagu, szukał tego, dzięki – Flion

1

Wystarczy użyć znak po wzorze generującym tekst wewnętrzny, jeśli chcesz używać regularnych wyrażeń. na przykład:

".*" to "(.*?)" 
Powiązane problemy