2011-11-05 23 views
6

Mã: var foo = /\</;Tại sao jslint phàn nàn khi tôi thoát <ký tự trong RegEx?

Khi tôi đi đến jslint.com và nhập vào, tôi nhận được:

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

Nó được sử dụng để cho tôi biết Unexpected escaped character '<' in regular expression. nhưng thời gian đã thay đổi.

Vì vậy, tôi chỉ tò mò, tại sao? Nếu bạn thử var foo = /\>/; nó không quan tâm, thỏa thuận với < là gì?

+5

Không cần để thoát khỏi "<" ký tự ở đó. Ngoài ra JSLint chỉ là sự mã hóa các ý kiến ​​ngẫu nhiên của Crockford. Hãy suy nghĩ về nó như một anh chàng lạ tại một trạm xe buýt phàn nàn với bạn về mã của bạn. – Pointy

+0

Tôi biết không cần phải thoát khỏi nó, do đó lỗi. Nhưng tại sao nhân vật đó đặc biệt ... ra khỏi tất cả các nhân vật không cần thiết để trốn thoát, tại sao '<'. – goatslacker

+0

Tôi chắc chắn có lý do cho quyết định của anh ấy đưa cảnh báo đó vào đơn đăng ký của anh ấy. Ngay cả khi lý do là "nó ngu ngốc và khó hiểu." – goatslacker

Trả lời

3

Nếu bạn có một hai divs đơn giản, sự khác biệt là rõ ràng:

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

JSLint không giả định rằng kịch bản là một tập tin độc lập hoặc bên trong một thẻ script của một tài liệu HTML. Trong các ngôn ngữ đánh dấu, chẳng hạn như XUL, MXML, XAML, TVML, LZX, XHTML5 hoặc SVG, nội dung thẻ tập lệnh được xử lý như div đầu tiên trong ví dụ trên, vì vậy khung góc trái sẽ trông giống như bắt đầu thẻ. Trong những ngôn ngữ, sử dụng một sự thay thế thực thể hoặc một khối CDATA để bọc các góc khung và dấu và ký tự bên trái:

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

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

Tài liệu tham khảo

Các vấn đề liên quan