Meqenëse komentet nuk mund të futen në HTML, një regex mund ta bëjë punën, në teori. Megjithatë, përdorimi i një lloj analizuesi do të ishte zgjidhja më e mirë, veçanërisht nëse kontributi juaj nuk është i garantuar të jetë i mirëformuar.
Këtu është përpjekja ime për të. Për t'iu përshtatur vetëm komenteve normale, kjo do të funksiononte. Është bërë një përbindësh, më vjen keq për këtë. E kam testuar shumë, duket se e bën mirë, por nuk jap garanci.
<!--(?!\s*(?:\[if [^\]]+]|<!|>))(?:(?!-->).)*-->
Shpjegim:
<!-- #01: "<!--"
(?! #02: look-ahead: a position not followed by:
\s* #03: any number of space
(?: #04: non-capturing group, any of:
\[if [^\]]+] #05: "[if ...]"
|<! #06: or "<!"
|> #07: or ">"
) #08: end non-capturing group
) #09: end look-ahead
(?: #10: non-capturing group:
(?!-->) #11: a position not followed by "-->"
. #12: eat the following char, it's part of the comment
)* #13: end non-capturing group, repeat
--> #14: "-->"
Hapat #02 dhe #11 janë vendimtare. #02 sigurohet që karakteret e mëposhtme të mos tregojnë një koment të kushtëzuar. Pas kësaj, #11 sigurohet që karakteret e mëposhtme të mos tregojnë fundin e komentit, ndërsa #12 dhe #13 shkaktojnë përputhjen aktuale.
Aplikoni me flamuj "global" dhe "dotall".
Për të bërë të kundërtën (përputhen vetëm me komentet e kushtëzuara), do të ishte diçka si kjo:
<!(--)?(?=\[)(?:(?!<!\[endif\]\1>).)*<!\[endif\]\1>
Shpjegim:
<! #01: "<!"
(--)? #02: two dashes, optional
(?=\[) #03: a position followed by "["
(?: #04: non-capturing group:
(?! #05: a position not followed by
<!\[endif\]\1> #06: "<![endif]>" or "<![endif]-->" (depends on #02)
) #07: end of look-ahead
. #08: eat the following char, it's part of the comment
)* #09: end of non-capturing group, repeat
<!\[endif\]\1> #10: "<![endif]>" or "<![endif]-->" (depends on #02)
Përsëri, aplikoni me flamuj "global" dhe "dotall".
Hapi #02 është për shkak të sintaksës "zbuluar nga niveli i poshtëm", shikoni: "MSDN - Rreth komenteve të kushtëzuara".
Nuk jam plotësisht i sigurt se ku lejohen apo priten hapësirat. Shto \s*
në shprehje aty ku është e përshtatshme.
18.06.2009