2012-02-27 95 views
5

我使用jQuery對一列電子郵件進行排序,儘管它們是在js中進行base64編碼的......所以我需要一個regex命令來忽略<script>.*?<script>標記,並且只對後面的內容進行排序他們(在<noscript>標籤內)。正則表達式使用js從html中剝離js

列HTML

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

需要一些愛

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

是否爲每個電子郵件條目重複位於「」或「​​」之內的所有電子郵件? – tftd 2012-02-27 19:06:56

+0

如果每封電子郵件都在一個無腳本塊中,爲什麼不直接按jQuery(「noscript」).text()? – slashnick 2012-02-27 19:14:04

回答

2

假設HTML的結構不發生變化的正則表達式,你可以使用這個:

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

它ge對所有文本節點進行篩選,然後篩選到索引爲1的文本節點,並獲取它的文本值。

如果你想堅持使用正則表達式,這裏有一個:

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

謝謝,這工作:) – Jeffrey 2012-02-27 19:18:05

0

我知道這是不是你問什麼了(雖然我有點困惑你問什麼,說實話...),但你看過使用document.getElementsByTagName('noscript')?這個函數應該返回一個數組,其中的第一個元素將是你的noscript元素。

此外,我並不十分清楚您對此問題的整體解決方案,但似乎您誤解了noscript元素的用途。 noscript元素僅在瀏覽器不支持JavaScript時執行,這意味着只有當用戶修改noscript內容的Javascript不會運行時,纔會向用戶顯示noscript內容。

也許你可以澄清你到底想要做什麼?

+0

當'noscript'存在於一個元素中時,它仍然是該元素的子元素,並且仍然可以選擇,無論JavaScript在那裏。唯一的區別是,如果啓用JavaScript,它將被隱藏。獲得'td'的'textContent'仍然會返回'script'標籤和'noscript'標籤。 – 2012-02-27 19:18:15

+0

沒錯。我想我是在解釋他的問題,意思是他想用JavaScript來修改'noscript'標籤中的內容然後顯示給用戶,但這可能是我的一個誤解。 – JacobEvelyn 2012-02-27 21:37:15