Я пытаюсь удалить оболочку 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 ответа
Вы можете просто заменить необработанную строку и вообще не использовать регулярные выражения:
"FOO BAR".replace("FOO", ""); // replace "FOO" with "" (nothing)
В твоем случае:
var stringToSanitize = "//<![CDATA[ xxx //]]>";
var sanitizedString = stringToSanitize
.replace("//<![CDATA[", "")
.replace("//]]>", "");
Регулярные выражения в JavaScript работают медленно. Таким образом, помимо того, что вы решили свою проблему, вы можете увидеть небольшое увеличение скорости на моем примере.
Разве недостаточно просто добавить <
после первой косой черты в первом replace
и '>' после последней косой черты в последнем replace
? Если ваш диалект регулярных выражений принимает эти угловые скобки как магические символы (немногие), вы можете использовать \<
и \>
соответственно, т. е. экранировать их с помощью обратной косой черты.
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript/JS) и его различных диалектах/реализациях (кроме ActionScript). Имейте в виду, что JavaScript — это НЕ то же самое, что Java! Включите все ярлыки, относящиеся к вашему вопросу; например, [node.js], [jQuery], [JSON], [ReactJS], [angular], [ember.js], [vue.js], [typescript], [svelte] и т. д.