【问题标题】:Why does jslint complain when I escape the < character in a RegEx?当我在正则表达式中转义 < 字符时,为什么 jslint 会抱怨?
【发布时间】:2025-11-29 02:50:02
【问题描述】:

代码:var foo = /\&lt;/;

当我转到 jslint.com 并输入时,我得到:

Problem at line 1 character 12: Unexpected '\'.

它曾经告诉我Unexpected escaped character '&lt;' in regular expression.,但时代变了。

所以我只是好奇,为什么?如果你尝试var foo = /\&gt;/; 没关系,&lt; 是怎么回事?

【问题讨论】:

  • 这里不需要转义“
  • 我知道没有必要逃避它,因此会出现错误。但是为什么特别是那个字符......在所有不必要的字符中转义,为什么&lt;
  • 我确信他决定在他的申请中包含该警告是有原因的。即使原因是“这很愚蠢和令人困惑。”

标签: javascript jslint


【解决方案1】:

如果你有两个简单的 div,区别就很明显了:

<div> < </div> <!--Missing right angle bracket, bad markup-->
<div> > </div> <!--No problem, just a greater than text node-->

JSLint 不假定脚本是独立文件或位于 HTML 文档的脚本标记内。在XULMXMLXAMLTVMLLZXXHTML5SVG 等标记语言中,脚本标签内容被视为上面示例中的第一个 div,因此左尖括号看起来像标签的开始。在这些语言中,使用实体替换或 CDATA 块来包装左尖括号和 & 字符:

<script> 
if ( -1 &lt; 0 &amp;&amp; true !== false) {} 
</script>

<script>
<![CDATA[
if ( -2 < 0 && true !== false) {}
]]>
</script>

参考文献

【讨论】: