Tjena!
Vad tror du om
(<script[^>]*>\s*)<!--((?:.|\s)*?)-->(\s*<\/script>)
Ersättningsmönstret skulle kunna vara
// $1 = <script...>, $2 = <allt utom kommentarerna>, $3 = </script>
$1<[CDATA[$2]]>$3
2 svar · 577 visningar · startad av echoSwe
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.
Tjena!
Vad tror du om
(<script[^>]*>\s*)<!--((?:.|\s)*?)-->(\s*<\/script>)
Ersättningsmönstret skulle kunna vara
// $1 = <script...>, $2 = <allt utom kommentarerna>, $3 = </script>
$1<[CDATA[$2]]>$3
Det tror jag blir jättebra Tack!