我在<script>
标记中有一些带有内联javascript的HTML代码,其中包含一个正则表达式,如{p>中所示,该字符删除了>
和<
字符之间的多余空格。
<script>
[...]
output = output.replace(/>\s*</g, '><');
[...]
</script>
这是无效的HTML(例如,根据PHP DOMDocument->loadHTML()
),因为它是字符序列</
ends processing,并且期望其后跟结束标记{{1 }}。
我曾尝试将script>
转换为<
,但随后该表达式不再匹配(在jsfiddle中进行了测试)。
一种解决方法是在正则表达式中插入实际上不会做任何事情,只是将<
与<
分开的内容,例如
/
这可以正常工作并且具有预期的行为,但是看起来却很糟糕。
在js正则表达式中在output = output.replace(/>\s*[<]/g, '><');
之前转义<
的正确方法是什么?
答案 0 :(得分:1)
如果PHP的DOMDocument->loadHTML()
认为脚本元素到此结束,那么我可以肯定这是DOMDocument->loadHTML()
中的错误。脚本元素以</script>
结尾,并且script
元素的内容不是 HTML。 script
elements的内容模型比规范中需要多段说明的模型要有趣得多。
关于</
的问题,规范only mentions处理<!--
和</script>
,而不是一般的</
。
但是,如果您必须具有内联脚本(如果代码位于.js
文件中,则不会有此问题),并且必须将其加载有明显有错误的内容,字符类([<]
而不是<
)一点也不差。 (我怀疑性能是否是您关心的问题,但如果是这样,我想我们可以肯定地说JavaScript引擎的正则表达式处理程序将能够优化该单个字符字符类。)>