2012-02-27 16 views
5

Używam jQuery do sortowania kolumny wiadomości e-mail, ale są one kodowane base64 w js ... więc potrzebuję polecenia regex, aby zignorować znaczniki <script>.*?<script> i tylko sortować to, co jest po je (w tagach <noscript>).Regex za pomocą js do strip js z html

HTML Kolumna

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

Regex że potrzebuje trochę miłości

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

Czy wszystkie wiadomości e-mail znajdujących się w '' albo '' jest powtarzany dla każdego wpisu e-mail? – tftd

+0

Jeśli każdy e-mail znajduje się w bloku Noscript, dlaczego nie posortować po prostu jQuery ("noscript"). Text()? – slashnick

Odpowiedz

2

Zakładając, że struktura html nie zmienia, można użyć to:

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

To ge ts wszystkie węzły tekstowe, a następnie filtry do tego w indeksie 1 i uzyskaj jego wartość tekstową.

A jeśli chcesz trzymać się z regexp, tutaj jest jeden:

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

Dzięki, to zadziałało :) – Jeffrey

0

wiem, że to nie jest dokładnie to, o co prosisz dla (chociaż jestem trochę zdezorientowany co prosisz , szczerze mówiąc ...), ale czy spojrzałeś na używanie document.getElementsByTagName('noscript')? Ta funkcja powinna zwrócić tablicę, której pierwszym elementem będzie twój element noscript.

Ponadto, nie jestem całkiem jasny na temat ogólnego podejścia do tego problemu, ale wydaje się, że nie rozumiesz celu elementu noscript. noscript elementy są uruchamiane tylko wtedy, gdy przeglądarka nie obsługuje Javascript, co oznacza, że ​​jedynym wyświetlanym użytkownikom będzie treść w postaci noscript, gdy kod JavaScript, którego używasz do modyfikowania zawartości noscript, nie będzie działać.

Być może mógłbyś wyjaśnić, co dokładnie próbujesz zrobić?

+0

Gdy "noscript" istnieje w elemencie, nadal będzie potomkiem tego elementu i nadal będzie można go wybrać niezależnie od tego, czy JavaScript jest w tym miejscu. Jedyna różnica polega na tym, że jeśli JavaScript jest włączony, będzie on ukryty. Uzyskanie "textContent" z 'td' nadal zwraca znaczniki' script' i 'noscript'. –

+0

Dobrze. Wydaje mi się, że interpretowałem jego pytanie w ten sposób, że chciał używać JavaScript do modyfikowania treści w tagach 'noscript', aby następnie wyświetlać je użytkownikowi, ale było to prawdopodobnie nieporozumienie z mojej strony. – JacobEvelyn