我正在阅读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 '.'
所以这一次,我的问题是模式\\.
何时起作用?
答案 0 :(得分:4)
变量更好地命名为css3Identifier
或其他东西。
将[\w-]|[^\x00-\xa0]
转换为更符合规范的等效表单:
[a-zA-Z0-9_-]|[\u00A1-\uFFFF]
请注意A1
为161
,_
为下划线,-
为破折号,然后
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])字符。如果数字或字母跟在十六进制数字后面,则需要清除数字的结尾。有两种方法可以做到这一点:
- 带空格(或其他空白字符):“\ 26 B”(“&amp; B”)。在这种情况下,用户代理应将“CR / LF”对(13/10)视为单个空白字符。
- 提供正好6个十六进制数字:“\ 000026B”(“&amp; B”)
醇>实际上,这两种方法可以结合起来。在十六进制转义后,只忽略一个空白字符。请注意,这意味着转义序列之后的“真实”空格本身必须转义或加倍。
反斜杠转义符始终被视为标识符或字符串的一部分(即“\ 7B”不是标点符号,即使“{”是,并且“\ 32”在开头时是允许的类名,即使“2”不是。)