JS 正则表达式

Posted by Chiaki on February 22, 2017

正则表达式基本规则

1、普通字符

包括:字母、数字、汉字、下划线、没有特殊定义的标点符号。 (在匹配一个字符串时,匹配与之相同的一个字符)


2、简单的转义字符

(1)在字母面前加”"来代替一些不方便书写的字符,匹配与之相同的一个字符

表达式 可匹配
\r 回车
\n 换行符
\t 制表符

(2)在有特殊用处的标点符号前加“\”代表该符号本身,匹配与之相同的一个字符

表达式 可匹配  
\ 匹配”"符号本身  
\^ 匹配”^”符号本身  
\$ 匹配”$”符号本身  
\. 匹配”.”符号本身  
\(和\) 匹配”(“和”)”  
\[和\] 匹配”[“和”]”  
\{和\} 匹配”{“和”}”  
\? 匹配”?”符号本身  
\+ 匹配”+”符号本身  
\* 匹配”*“符号本身  
| 匹配” “符号本身

(3)匹配“多种字符”中任意一个字符的表达式

表达式 可匹配
\d 任意一个数字:0~9中任意一个
\D 匹配所有非数字字符
\w 任意一个字母数字或下划线:a~z、A~Z、0~9、_中任意一个
\W 匹配所有字母、数字、下划线以外的字符
\s 包括空格、制表符、换页符在内的空白字符中的任意一个
\S 匹配所有非空白字符
. 匹配除了换行符(\n)以外的任意一个字符

(4)使用[]自定义能够匹配多种字符的表达式

表达式 可匹配 举例
[]包含一系列字符 匹配[]中包含的任意一个字符 [ab23@]:可匹配a、b、2、3、@中任意一个字符;
[a-g]:匹配a到g之间的任意一个字符
[^]包含一系列字符 匹配[]以外的任意一个字符 [^ab23@]:匹配除了a、b、2、3、@意外的所有字符中的一个;
[^C-H3-7]:匹配”C~H”、”3~7”之外的任意一个字符

(5)修饰匹配次数的特殊符号

表达式 作用 举例
{n} 表达式重复n次 a{2}相当于aa
{m,n} 表达式至少重复m次,最多重复n次 ab{2,3}相当于abb或者abbb
{m,} 表达式至少重复m次 \w\d{2,}可以匹配a12,b23,c345,d4567,…
? 匹配表达式0次或者1次 a[bc]?可以匹配ab或者ac或者a
+ 表达式至少出现一次 a+b可以匹配abaabaaab,…
* 表达式不出现或者出现任意次 a*b可以匹配b,ab,aab,aaab,…

(6)代表抽象意义的特殊符号

表达式 作用 举例
^ 与字符串开始的地方匹配,不匹配任何字符 ^aa只能匹配在字符串开头的aa
$ 与字符串结束的地方匹配,不匹配任何字符 zzz$只能匹配位于字符串结尾处的zzz
\b 匹配一个单词的边界 .\b在匹配#@#abc时匹配到的内容是#a\b本身不匹配任何字符,但是它要求在它在匹配结果中所处的位置一边是\w一边是非\w
\B 匹配非单词边界 即左右两边都是\w或者左右两边都不是\w
  左右表达式之间是“或”的关系,匹配左边或者右边 a\|b可以匹配a或者b
() 1、在修饰匹配次数时在,整个括号表达式作为一个整体;
2、取匹配结果的时候,括号中的表达式可以被单独得到
1、(abc){2}匹配abcabc

若希望()括号表达式匹配的结果不进行记录,可以使用(?:xxxxx)形式


正则表达式高级规则

1、匹配次数的贪婪与非贪婪

模式 效果 用法
贪婪模式 尽可能“要匹配” eg:(d)(\s+)
非贪婪模式 尽可能“不匹配” 在修饰匹配次数的特殊符号后再加上一个 “?” 号
eg:(d)(\s+?)

2、反向引用

表达式在匹配时,小括号 “( )” 包含的表达式所匹配到的字符串也会被记录下来【括号表达式的第二个作用】。 可以通过在“\”后面接一个数字,引用前面的括号匹配到的字符串。eg:\1匹配的是第一对括号内匹配的字符串,\2匹配的是第2对括号内匹配到的字符串,以此类推。【括号的排序按左括号”(“为准】

3、预搜索&&反向搜索

方法名 表达式 匹配
预搜索 (?=xxxx)
(?!xxxx)
所在缝隙右边必须能够匹配xxxx这部分表达式【xxxx不在匹配的表达式范围内】
所在缝隙右边必须不能匹配xxxx这部分表达式
反向预搜索 (?<=xxxx)
(?<\!xxxx)
所在缝隙左边必须能够匹配xxxx这部分表达式
所在缝隙左边必须不能匹配xxxx这部分表达式

其他通用规则

形式 可匹配
\xXX 匹配ASCII码编号在0~255范围的字符。eg:\x21代表”!”
\uXX 匹配任何字符