5
更換CDATA標籤我有內部可能出現的多個CDATA標籤的字符串:在XML
<![CDATA[A Survey of Applications of Identity-Based Cryptography in Mobile Ad-Hoc Networks]]>
我使用javascript/jQuery和我需要刪除多個CDATA標記(用「」替換它們)。
我怎麼能寫這與正則表達式?
更換CDATA標籤我有內部可能出現的多個CDATA標籤的字符串:在XML
<![CDATA[A Survey of Applications of Identity-Based Cryptography in Mobile Ad-Hoc Networks]]>
我使用javascript/jQuery和我需要刪除多個CDATA標記(用「」替換它們)。
我怎麼能寫這與正則表達式?
@Jim Garrison在上面的評論中是正確的:無法穩健地用正則表達式解析XML/HTML。該語言太複雜,無法用正則表達式表示。
但是,這並不意味着你不能寫一個正則表達式,它將覆蓋最合理的情況,這可能足以滿足你的需求。例如,下面的JavaScript正則表達式將主要做你想要什麼:
input.replace(/<!\[CDATA\[.*?\]\]>/g, '');
說明的兩件事情在這個正則表達式:在CDATA體內的通配符(.*?
)由懶惰與?
修改。如果沒有,下面的壞事情會發生:
'before <![CDATA[blah]]> some stuff between <![CDATA[another cdata]]> after'
.replace(/<!\[CDATA\[.*\]\]>/g, '');
// returns "before after" when we probably
// wanted "before some stuff between after"
的另一件事是,我們使用g
標誌,以表明所有比賽應更換。否則只會替換第一場比賽。
閱讀評論,它看起來像你可能想簡單地去除CDATA標籤,同時保持其內容完好無損。正如@Jim Garrison指出的那樣,這是一個糟糕的主意,因爲你很容易留下無效的HTML;這就是CDATA的重點。但如果你確實想這樣做,這是如何:
'outside <![CDATA[(cdata1)]]> inside <![CDATA[(cdata2)]]> after'
.replace(/<!\[CDATA\[(.*?)\]\]>/g, '$1');
// yields "outside (cdata1) inside (cdata2) after"
試圖用正則表達式做到這一點將導致瘋狂。看到[這個答案](http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags#1732454) –
你想刪除只有'<! CDATA ['及其關閉]]>',或者包含標籤內文本的所有內容? –
我只想刪除所有cdata標記的出現,使用這個:string.replace(「<![CDATA [」,「」).replace(「]]>」,「」);只會刪除一個。 – Toniq