characterEncoding是什么意思

时间:2013-07-08 15:24:59

标签: javascript regex sizzle

我正在阅读Sizzle源代码。当我阅读关于characterEncoding的常规内容时,我感到很困惑。在源代码中,characterEncoding定义如下:

characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+"

看起来试图匹配\\。或\ w-或^ \ x00- \ xa0。 我知道[\ w-]表示\或w或 - ,我也知道[^ \ x00- \ xa0]表示不在\ x00- \ x20中的任何内容。谁能告诉我关于\\的含义是什么。和\ x00- \ x20。

由于


我想我知道它是什么。 characterEncoding的类型是字符串。所以,如果我们分配如下:

characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+"

characterEncoding的值是:

(?:\\.|[\w-]|[^\x00-\xa0])+

因此,如果我构建如上所述的正则表达式,则意味着:

[\w-] // A symbol of Latin alphabet or a digit or an underscore '_' or '-'
[^\\x00-\\xa0] // ISO 10646 characters U+00A1 and higher
\\. // '\' and '.'

所以这一次,我的问题是模式\\.何时起作用?

2 个答案:

答案 0 :(得分:4)

变量更好地命名为css3Identifier或其他东西。

[\w-]|[^\x00-\xa0]转换为更符合规范的等效表单:

[a-zA-Z0-9_-]|[\u00A1-\uFFFF]

请注意A1161_为下划线,-为破折号,然后 read this

  

在CSS3中,标识符(包括选择器中的元素名称,类和ID(参见[SELECT] [或仍然如此]))只能包含字符 [A-Za-z0-9] < / strong>和ISO 10646字符 161及更高,加上连字符( - )下划线(_)

“和更高”由-\uFFFF

涵盖

"\\\\."匹配以反斜杠开头的任何单个字符。例如 - \7B将与\7匹配,然后B将被捕获 由中间替代。它还匹配\n\r\t等。

答案 1 :(得分:1)

它只是CSS标识符,类,标记和属性的有效正则表达式格式。链接也在源代码注释中。以下是规则,包括可能使用反斜杠,可能会回答您的问题:

  

4.1。字符和案例

     

以下规则始终有效:

     
      
  • 除了不受CSS控制的部分外,所有CSS样式表都不区分大小写。例如,HTML属性“id”和“class”,字体名称和URI的值的区分大小写超出了本规范的范围。请特别注意,元素名称在HTML中不区分大小写,但在XML中区分大小写。

  •   
  • 在CSS3中,标识符(包括选择器中的元素名称,类和ID(参见[SELECT] [或仍然如此]))只能包含字符[A-Za-z0-9]和ISO 10646字符161和更高,加上连字符( - )和下划线(_);它们不能以数字或连字符后跟数字开头。它们还可以包含转义字符和任何ISO 10646字符作为数字代码(请参阅下一项)。例如,标识符“B&amp; W?”可以写成“B \&amp; W \?”或“B \ 26 W \ 3F”。 (参见[UNICODE310]和[ISO10646]。)

  •   
  • 在CSS3中,反斜杠()字符表示三种类型的字符转义。

         

    首先,在字符串内部(参见[CSS3VAL]),将忽略后跟换行符的反斜杠(即,该字符串被认为不包含反斜杠或换行符。)

         

    其次,它取消了特殊CSS字符的含义。任何字符(十六进制数字除外)都可以使用反斜杠进行转义,以消除其特殊含义。例如,“\”“是由一个双引号组成的字符串。样式表预处理器不能从样式表中删除这些反斜杠,因为这会改变样式表的含义。

         

    第三,反斜杠转义允许作者引用他们不能轻易放入样式表的字符。在这种情况下,反斜杠后跟最多六个十六进制数字(0..9A..F),它代表带有该数字的ISO 10646([ISO10646])字符。如果数字或字母跟在十六进制数字后面,则需要清除数字的结尾。有两种方法可以做到这一点:

         
        
    1. 带空格(或其他空白字符):“\ 26 B”(“&amp; B”)。在这种情况下,用户代理应将“CR / LF”对(13/10)视为单个空白字符。
    2.   
    3. 提供正好6个十六进制数字:“\ 000026B”(“&amp; B”)
    4.         

      实际上,这两种方法可以结合起来。在十六进制转义后,只忽略一个空白字符。请注意,这意味着转义序列之后的“真实”空格本身必须转义或加倍。

        
    5. 反斜杠转义符始终被视为标识符或字符串的一部分(即“\ 7B”不是标点符号,即使“{”是,并且“\ 32”在开头时是允许的类名,即使“2”不是。)

    6.   

http://www.w3.org/TR/css3-syntax/#characters