Regex для удаления оболочки CDATA из файла XHTML - PullRequest
0 голосов
/ 26 июня 2009

Я пытаюсь удалить оболочку 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> 
>

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

Ответы [ 2 ]

5 голосов
/ 26 июня 2009

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

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

В вашем случае:

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

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

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

0 голосов
/ 26 июня 2009

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

...