2009-07-24 9 views
2

In JavaScript/JQuery möchte ich den ganzen Text erhalten, der zwischen anderem Text gesehen wird. Zum Beispiel, wenn das HTML-Dokument hat:Javascript RegEx: Erhalten Sie alle Texttreffer umgeben von anderem Text?

<b class="blah">Blah: Some Text 1</b> 
<div id="foo"><b class="blah">Blah: Some Text 2</b> 

Ich mag ein Array erhalten, die ‚Some Text 1‘ und ‚Some Text 2‘, da sie beide in zwischen ‚<b class="blah">Blah:‘, gefolgt von einem "hat </b> '

Antwort

1

Da Sie jQuery erwähnen, wählen Sie einfach alle richtigen Knoten aus und überprüfen Sie deren Text. Sie können einen Regex hier einfügen, wenn Sie möchten, aber es wird nicht benötigt.

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
<html lang="en"> 
<head> 
<title>test</title> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
<script type="text/javascript" src="http://jqueryjs.googlecode.com/files/jquery-1.3.2.min.js"></script> 
<script type="text/javascript"> 
$(function(){ 
    var texts = []; 
    $('b.blah').each(function() 
    { 
     var txt = $(this).text(); 
     if (0 == txt.indexOf('Blah:')) 
     { 
      texts.push(txt.substr(6)); 
     } 
    }); 
    alert(texts); 
}); 
</script> 

</head> 
<body> 
    <b class="blah">Blah: Some Text 1</b> 
    <div id="foo"><b class="blah">Blah: Some Text 2</b> 
    <div id="foo"><b class="blah">Some Text 3</b> 
</body> 
</html> 

Oder mit einer Reihe von HTML

$(function(){ 
    var htmlChunk = '<b class="blah">Blah: Some Text 1</b>\n' 
    + '<div id="foo"><b class="blah">Blah: Some Text 2</b></div>\n' 
    + '<div id="foo2"><b class="blah">Some Text 3</b></div>'; 

    var texts = []; 
    $('b.blah', '<div>' + htmlChunk + '</div>').each(function() 
    { 
     var txt = $(this).text(); 
     if (0 == txt.indexOf('Blah:')) 
     { 
      texts.push(txt.substr(6)); 
     } 
    }); 
    alert(texts); 
}); 
+0

Ich habe diese Lösung vergessen. Das HTML, das ich analysieren möchte, wird jedoch als String gespeichert (d. H. Mein HTML-Snippet wird in einer Javascript-Variablen gespeichert). Kann Jquery eine Zeichenkette wie eine HTML-Datei analysieren? –

+0

Ja - oben hinzugefügt. Nicht sicher, wie effizient es mit wirklich großen HTML-Stücken ist. –

0

Das ist in JS ziemlich schwierig, weil es keine praktische Möglichkeit gibt, einen globalen Satz von Paren-Captures abzurufen. Ein solcher Hack könnte funktionieren:

+0

Aus irgendeinem Grund, dies erscheint nur aus "|" (das letzte Zeichen in der Zeichenfolge). Mache ich es falsch? –

+0

Hunh. Verwenden Sie zufällig das Ergebnis von 'chunks.pop()'? Was ich meinte ist, dass du das verwenden solltest, was in "Brocken" übrig ist, nachdem du das 'pop()' gemacht hast. – chaos

0

Dieser Code wird ein Array mit dem Text zwischen '<b class="blah">Blah:' und '</b>' produzieren. in diesem Beispiel 'Some Text 1' und 'Some Text 2'

var s = '<b class="blah">Blah: Some Text 1</b><div id="foo"><b class="blah">Blah: Some Text 2</b>'; 

var regex = /<b class="blah">Blah: (.+?)<\/b>/gi; 
var result = []; 
var e; 
while (e = regex.exec(s)) 
{ 
    result.push(e[1]); 
}; 
+1

Während die Iteration nie aufhört ... –

Verwandte Themen