Tja,
Har ett regex (C#):
(<script[^<]*>){1}(?(?=\s*<!--)(\s*<!--)(\s*.*?)(//\s*-->)|(\s*.*?))\s*(</script>){1}
Det är som ni ser indelat i 6 grupper, index 0 till och med 5, genom paranteserna.
Den letar efter följande typ av kod:
<script type="text/javascript">
<!--
document.write(...);
-->
</script>
För att sedan ersätta
<!--
det med
<[CDATA[
och
-->
med
]]>
.
Det fungerar bra, men inte om man redan har skrivit
<script type="text/javascript">
<[CDATA[
$('hej').ToUppercase();
]]>
</script>
För att ta ett exempel. Så jag testade med följande regex:
(<script[^<]*>){1}(?(?=\s*<!--?!\s*<\[CDATA\[)(\s*<!--)(\s*.*?)(//\s*-->)|(\s*.*?))\s*(</script>){1}
Vilket dock fortfarande matchar och därmed dubblerar cdata-beteckningarna. Jag vill alltså att den ska matcha html-kommentarer inom scripttaggar, men inte CDATA-beteckningar i scripttaggar.