字符编码是什么意思?

4
我正在阅读 Sizzle 源代码。当我阅读有关字符编码的正则表达式时感到困惑。在源代码中,characterEncoding 的定义如下:
characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+"

这段文字涉及IT技术相关内容。 "It looks try to match \\. or \w- or ^\x00-\xa0." 我知道 [\w-] 的意思是匹配一个反斜杠、字母“w”或短划线,而且我也知道 [^\x00-\xa0] 的意思是不匹配\x00-\x20之间的任何字符。但有谁能告诉我 \\. 和 \x00-\x20 分别代表什么意思。

谢谢


我想我知道它是什么了。字符编码类型是字符串。所以如果我们像下面这样分配:

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

字符编码的值是:
(?:\\.|[\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个回答

4
变量最好命名为css3Identifier或其他类似的名称。
[\w-]|[^\x00-\xa0]转换成与规范更匹配的等效形式:
[a-zA-Z0-9_-]|[\u00A1-\uFFFF]

Consider that A1 is 161, _ is underscore and - is a dash and then read this:
In CSS3, identifiers (including element names, classes, and IDs in selectors (see [SELECT] [or is this still true])) can contain only the characters [A-Za-z0-9] and ISO 10646 characters 161 and higher, plus the hyphen (-) and the underscore (_).
"and higher" is covered by -\uFFFF.
""\\\\."匹配由反斜杠前缀的任意单个字符。例如-\7B将匹配\7,然后B将被中间的选择捕获。它还匹配\n\r\t等。"

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&W?”可以写成“B\&W\?”或“B\26 W\3F”。(参见[UNICODE310]和[ISO10646])。

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

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

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

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

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

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

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

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


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