Я пытаюсь удалить оболочку CDATA в следующем скрипте (содержимое должно быть обернуто CDATA для прохождения проверки XHTML):

<script id="tplTest" type="text/html">

//<![CDATA[ 
<p id="msg">Hello</p>
<p>Another test: <#= ddd.ArtID #></p> 
//]]>

</script> 

JavaScript:

var strTmp = document.getElementById("tplTest").innerHTML;
var strNew = strTmp.replace(/[\/(\/!\[)\]CDATA]/g, "").replace(/[(\/\/\]\])]/g, "");

Он удаляет большую часть разметки CDATA, кроме тегов начала/конца (<, >):

< 
<p id="msg">Hello<p>
<p>nother test: <#= ddd.rtI #><p> 
>

Вопрос: Как мне изменить регулярное выражение, чтобы дополнительно удалить эти начальные и конечные теги <, >?

0
mshelv 26 Июн 2009 в 19:02

2 ответа

Вы можете просто заменить необработанную строку и вообще не использовать регулярные выражения:

"FOO BAR".replace("FOO", ""); // replace "FOO" with "" (nothing)

В твоем случае:

var stringToSanitize = "//<![CDATA[ xxx //]]>";

var sanitizedString = stringToSanitize
                      .replace("//<![CDATA[", "")
                      .replace("//]]>", "");

Регулярные выражения в JavaScript работают медленно. Таким образом, помимо того, что вы решили свою проблему, вы можете увидеть небольшое увеличение скорости на моем примере.

5
cllpse 26 Июн 2009 в 19:13

Разве недостаточно просто добавить < после первой косой черты в первом replace и '>' после последней косой черты в последнем replace? Если ваш диалект регулярных выражений принимает эти угловые скобки как магические символы (немногие), вы можете использовать \< и \> соответственно, т. е. экранировать их с помощью обратной косой черты.

0
Alex Martelli 26 Июн 2009 в 19:09