2013-10-13 70 views
0

我想匹配沒有被註釋掉的腳本標籤。爲此我試圖用這個表達式:匹配沒有被註釋掉的html標籤

(?is)((?<!<!--(?!-->))<script[^>]*>) 

邏輯是要求它<script[^>]*>不是<!--這反過來前面,後面沒有-->,但顯然(?!-->)不會在<script[^>]*>停止,之後一路去-->。如何告訴它在停止<script...

+0

我認爲[this](http://stackoverflow.com/a/1732454/1702990)鏈接可能在這種情況下是強制性的。 – Sinkingpoint

+0

補貨!我會成爲第一個和那個鏈接合作的人:) :) – Josh

+0

如果我要求正則表達式捕獲所有不在「b」和「c」之間的「a」,它會有幫助嗎? – makc

回答

0

要做到這一點,你可以前搜索所有評論內容,而此前,作爲交替,搜索腳本標籤,並把這個子模式中捕獲組:

<!--(?>[^-]+|-(?!->))*-->|(?i)(<script[^>]*>(?>[^<]+|<(?!/script>))*</script>) 

那麼結果是捕獲組。

如果你想使用replaceFirst()方法,你可以使用:

模式

(?i)((?><!--(?>[^-]+|-(?!->))*-->|[^<]+|<(?!script))*)(<script[^>]*>(?>[^<]+|<(?!/script>))*</script>) 

更換

$1 ### what you want ### 

(或使用捕獲組2一個回調函數)

+0

我應該說我想要它與.replaceFirst():) – makc

+0

@makc:看看我的編輯。 –

+0

犯錯......等等,它確實有效。殺了最後的評論。 – makc