Appearance
元字符
本节目标:理解“元字符”的核心思路,并能把它用于实际开发或面试表达。 量词元字符
+:让前面的元字符出现一到多次?:让前面的元字符出现0到1次*:让前面的元字符出现0到多次{n}:让前面的元字符出现n次{n,}:让前面的元字符出现n到多次{n,m}:让前面的元字符出现n到m次
**特殊元字符:**注意下特殊元字符的==影响普通元字符的个数== \:转义字符(把普通字符转变成有特殊意义的字符或把有特殊意义的字符转换为普通字符) .:匹配除了\n(换行符)和行结束符以外的任意字符 \d:匹配一个0-9之间的数字 \D:匹配任意一个非0-9之间的数字 \w:匹配一个0-9或字母或_中的任意一个字符 \r:匹配一个回车符 (U+000D)。 \W:查找非单词字符 \s:匹配一个空白字符,包括空格、制表符、换页符和换行符。 等价于[\f\n\r\t\v\u00a0\u1680\u180e\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]。 \S:查找非空白字符 \b:匹配单词边界 \B:匹配非单词边界 \0:查找NUL字符 \n:查找换行符 \f:查找换页符 \r:查找回车符 \t:查找制表符 \v:查找垂直制表符 \xxx:查找以八进制数 xxxx 规定的字符 \xdd:查找以十六进制数 dd 规定的字符 \uxxxx 查找以十六进制 xxxx规定的 Unicode 字符 X|Y:X或者Y中的一个,
**|会把它左或右的所有普通元字符作为整体。 方括号是单个匹配,==字符集==/==排除字符集==/==命名字符集== 如: [:digit:] 0-9[:alnum:] A-Za-z0-9[]中特殊字符被当成普通字符来匹配。除了放在开头的^以及表示范围的-以及转义字符\[a-z]:匹配a-z中的任意一个字符 [^a-z]:匹配任意一个非a-z的字符 [^xyz]:匹配除了xyz以外的任意字符 (x):正则的小分组,匹配一个小分组(小分组可以理解为大正则中的一个小正则),匹配x 并且记住匹配项,就像下面的例子展示的那样。括号被称为 捕获括号。特殊元字符将对(x)整个起作用,不加只对==单个元字符==起作用。 (?:x):匹配 x 但是不记住匹配项。这种叫作非捕获括号,使得你能够定义为与正则表达式运算符一起使用的子表达式。来看示例表达式/(?:foo){1,2}/。如果表达式是/foo{1,2}/,{1,2}将只对 foo 的最后一个字符 o 生效。如果使用非捕获括号,则{1,2}会匹配整个 foo 单词。 x(?=y):匹配x仅仅当x后面跟着y。这种叫做正向肯定查找。 例如,/Jack(?=Sprat)/会匹配到Jack仅仅当它后面跟着Sprat。/Jack(?=Sprat|Frost)/匹配Jack仅仅当它后面跟着Sprat或者是Frost。但是Sprat和Frost都不是匹配结果的一部分。 x(?!y):匹配x仅仅当x后面不跟着y,这个叫做正向否定查找。 例如,/\d+(?!\.)/匹配一个数字仅仅当这个数字后面没有跟小数点的时候。正则表达式/\d+(?!\.)/.exec("3.141")匹配141但是不是3.141^:以某一个元字符开始,注意与|在一起时影响元字符的范围 $:以某一个元字符结束,注意与|在一起时影响元字符的范围 [\b]:匹配一个退格(U+0008)。(不要和\b混淆了。) \b:匹配一个词的边界。一个词的边界就是一个词不被另外一个“字”字符跟随的位置或者没有其他“字”字符在其前面的位置。注意,一个匹配的词的边界并不包含在匹配的内容中。换句话说,一个匹配的词的边界的内容的长度是0。(不要和[\b]混淆了) 例子: /\bm/匹配“moon”中得‘m’; /oo\b/并不匹配”moon”中的’oo’,因为’oo’被一个“字”字符’n’紧跟着。 /oon\b/匹配”moon”中得’oon’,因为’oon’是这个字符串的结束部分。这样他没有被一个“字”字符紧跟着。 /\w\b\w/将不能匹配任何字符串,因为在一个单词中间的字符永远也不可能同时满足没有“字”字符跟随和有“字”字符跟随两种情况。 注意: JavaScript的正则表达式引擎将特定的字符集定义为“字”字符。不在该集合中的任何字符都被认为是一个断词。这组字符相当有限:它只包括大写和小写的罗马字母,十进制数字和下划线字符。不幸的是,重要的字符,例如“é”或“ü”,被视为断词。
