2012-02-27 26 views
5

Sto usando jQuery per ordinare una colonna di email, sebbene siano codificate in base64 in js ... quindi ho bisogno di un comando regex per ignorare i tag <script>.*?<script> e ordinare solo ciò che è dopo loro (all'interno dei tag <noscript>).Regex usando js per strip js da html

Colonna HTML

<td> 
    <script type="text/javascript"> 
     document.write(Base64.decode('PG5vYnI+PGEgaHJlZj0ibWFpbHRvOmJpY2VAdWNzYy5lZHUiIHRpdGxlPSJiaWNlQHVjc2MuZWR1Ij5iaWNlPC9hPjwvbm9icj48YnIgLz4K')); 
    </script> 
    <noscript>username</noscript> 
</td> 

Regex che ha bisogno di un po 'di amore

a.replace(/<script.*?<\/script>(.*?)/i,"$1"); 
+0

Sono tutti i messaggi di posta elettronica si trova in '' o '' viene ripetuta per ogni voce e-mail? – tftd

+0

Se ogni e-mail è in un blocco noscript, perché non basta ordinare su jQuery ("noscript"). Text()? – slashnick

risposta

2

Supponendo che la struttura del codice HTML non cambia, è possibile utilizzare questo:

$(a)​.contents().filter(function(){ 
    return this.nodeType === 3 
}).eq(1).text(); 

ge ge ts tutti i nodi di testo e quindi filtra a quello di index 1 e get è il suo valore di testo.

E se si vuole attaccare con regexp, eccone uno:

a.replace(/(<script type="text\/javascript">[^>]+>|<noscript>.*<\/noscript>)/ig,""); 
+0

Grazie, ha funzionato :) – Jeffrey

0

So che questo non è esattamente quello che stai chiedendo (anche se sono un po 'confuso quello che stai chiedendo , ad essere onesti ...), ma hai guardato usando document.getElementsByTagName('noscript')? Questa funzione dovrebbe restituire un array, il cui primo elemento sarà l'elemento noscript.

Inoltre, non sono molto chiaro sul tuo approccio generale a questo problema, ma sembra che tu stia fraintendendo lo scopo di un elemento noscript. Gli elementi noscript vengono eseguiti solo quando il browser non supporta Javascript, il che significa che l'unica volta in cui il contenuto di noscript verrà visualizzato all'utente è quando il Javascript che si sta utilizzando per modificare il contenuto di noscript non verrà eseguito.

Forse potresti chiarire che cosa stai cercando di fare esattamente?

+0

Quando 'noscript' esiste in un elemento, sarà comunque un elemento figlio di quell'elemento e sarà comunque selezionabile indipendentemente dal fatto che JavaScript sia presente. L'unica differenza è che se JavaScript è abilitato, sarà nascosto. Ottenere il 'textContent' di' td' restituisce ancora i tag 'script' e' noscript'. –

+0

Giusto. Immagino che stavo interpretando la sua domanda per indicare che voleva usare JavaScript per modificare il contenuto all'interno dei tag 'noscript' per poi mostrarlo all'utente, ma quello era probabilmente un fraintendimento da parte mia. – JacobEvelyn