2010-04-12 10 views

risposta

9

Lazyanno,

se e solo se:

  1. avete letto SLaks 's inviare (come come il previous article he links to) e
  2. si pienamente comprendere i numerosi e meravigliosi modi in cui estrazione di informazioni da HTML usando le espressioni regolari può rompere, e
  3. si sono sicuri che nessuna delle preoccupazioni si applicano nel tuo caso (per esempio si può garantire che il vostro contributo non potrà mai contenere annidati, non corrispondenti ecc <b>/</b> tag oppure da altri eventi di <b> o </b> all'interno <script>...</script> o commento <!-- .. --> tag, ecc)
  4. si assolutamente e positivamente si desidera procedere con l'estrazione regolare l'espressione

... quindi utilizzare:

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); 

produce:

1;2'3aaabbb 
+0

è bello !!! grazie! :)))) – Koerr

+0

@lazyanno, prima di scegliere la regex o la soluzione DOM (in base ai criteri di prestazione), assicurarsi di ** time entrambi ** (** analizzare una stringa "rappresentante" ** con entrambi i metodi diversi volte, in un ciclo, e vedere quali sono i ** tempi effettivi ** su una ** varietà di browser **.) – vladr

8

You cannot parse HTML using regular expressions.

Invece, dovresti usare il DOM di Javascript.

Per esempio (usando jQuery):

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

Mi avvolgo il codice HTML in un tag <div> trovare elementi sia nidificati e non nidificati <b>.

+0

1732348 è SO 42.risponde a un'enorme quantità di domande. upvoting per questo inizia a sentirsi sciocco, ma diamine, non smetterà di essere vero in qualunque momento presto ... –

+3

Per la cronaca, non puoi ** affidabile ** analizzare HTML usando espressioni regolari. Se sono soddisfatte determinate condizioni, le informazioni possono essere * estratte * bene da HTML ben formato (X) con espressioni regolari. – vladr

+0

voglio usare regex javascript per ottenere il risultato non mi piace HTML parse (questo è lento) qualche altra idea? grazie :) – Koerr

2

Ecco un esempio, senza una dipendenza 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

Non penso che il suo HTML sia nel DOM. – SLaks

+0

@SLaks: Hm ... Ha detto "contenuto della pagina:" nel suo post. – Tomalak

+0

Leggi il suo commento alla mia risposta. – 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) ; 

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

+0

questo funziona per qualsiasi tag, cercava quello, grazie – Flion

1

Basta usare carattere dopo il modello di generazione per il testo interno se si desidera utilizzare le expersions regolari. per esempio:

".*" to "(.*?)" 
Problemi correlati