为什么我在正则表达式中转义“<”字符时,JSLint会抱怨?

6

代码: var foo = /\</;

当我在jslint.com输入这段代码时,会得到以下提示:

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

它以前会告诉我Unexpected escaped character '<' in regular expression.但现在的情况有所不同。

所以我只是好奇,为什么会这样?如果你尝试var foo = /\>/;,那么它就不会报错,那问题出在<上面了吗?


5
那里不需要转义"<"字符。而且JSLint只是Crockford随意观点的规范化。可以把它看作是在公交车站向你抱怨你的代码的奇怪人士。 - Pointy
我知道没有必要转义它,因此出现了错误。但是为什么会选择那个字符...在所有不必要的字符中,为什么是 < - goatslacker
我相信他在应用程序中包含那个警告的原因。即使原因是“这很愚蠢和令人困惑”。 - goatslacker
1个回答

3

如果你有两个简单的 div,它们之间的区别是明显的:

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

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

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

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

参考文献


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接