字面量字符和元字符
- 点字符(.) 匹配除回车(\r)、换行(\n)、行分隔符(\u2028)、和段分割符(\u2029)以外的所有字符
- 位置字符 用来提示字符所处的位置; (^)表示字符串开始的位置 ;($)表示字符串结束的位置
- 选择符(|) 表示 或 的关系 即cat|dog 表示匹配cat或者dog。选择符会包括它前后的多个字符,比如 /ab|cd/ 指的是匹配ab或者cd,而不是指匹配b或者c。如果想修改这个行为,可以使用圆括号。
- 转义符(\); 匹配有特殊含义的元字符 加上反斜杠。需要反斜杠转义的字符:(^),(.),([),($),((),()),(|),(*),(+),(?),({),(\)。
特殊字符串
- (\cX) 表示 Ctrl-[X],其中 X 表示A-Z之中任何一个字母 用来匹配控制字符
- ([\b]) 匹配退格键(U+0008),不要和\b混淆
- (\n) 匹配换行键
- (\r) 匹配回车键
- (\t) 匹配制表符tab(U+0009)
- (\v) 匹配垂直制表符(U+000B)
- (\f) 匹配换页符(U+000C)
- (\O) 匹配null字符(U+0000)
- (\xhh) 匹配一个以两位十六位进制数(\x00 - \xFF)表示的字符
- (\uhhhh) 匹配一个以四位十六进制数(\u0000 - \uFFFF) 表示的unicode字符
字符类 表示一系列字符可供选择 只要匹配其中一个,供选择的字符放在[]中
- 脱字符([^]) 表示除了字符之中的字符其他都可以匹配 。[^abc] 表示匹配除了abc以外的字符, [^] 表示匹配一切字符包括换行符
- 连字符(-), [a-c]表示匹配从a到c的字符 [0-9] 表示0123456789,只在[]中起作用。注意 [1-31]只匹配1-3而不是 1-31
预定义模式 表示几种常见模式的写法
- (\d) 表示0-9 相当于[0-9]
- (\D) 表示0-9以外的数字 相当于[^0-9]
- (\w) 表示任意的字母、数字和下划线 相当于[0-9A-Za-z_]
- (\W) 表示匹配除字母、数字和下划线以为的字符 相当于[^0-9a-zA-z_]
- (\s) 匹配空格(包括换行符、制表符、空格符等),相等于[ \t\r\n\v\f]。
- (\S) 匹配非空格的字符,相当于[^ \t\r\n\v\f]。
- (\b) 匹配词的边界。
- (\B) 匹配非词边界,即在词的内部
重复类 使用{}表示
- ({n}) 表示重复n次
- ({n,}) 表示至少重复n次
- ({n,m}) 表示重复不少于n次 不多于m次
量词 贪婪模式 最大限度的匹配 直到匹配到下一个不满足的字符为止
- (?) 表示某个模式出现0次或一次 相当于{0,1}
- (*) 表示某个模式出现0次或多次 相当于{0,}
- (+) 表示某个模式出现一次或者多次 相当于{1,}
修饰符
- (g) 默认情况 正则对象第一次匹配成功就会停止匹配 ,g表示全局匹配 主要用于搜索和替换
- (i) 默认情况下 正则区分字母的大小写,i表示忽略字母的大小写
- (m) m修饰符表示多行模式(multiline),会修改^和$的行为。默认情况下(即不加m修饰符时),^和$匹配字符串的开始处和结尾处,加上m修饰符以后,^和$还会匹配行首和行尾,即^和$会识别换行符(\n)。
- 组匹配==()== 正则表达式的括号表示分组匹配,括号中的模式可以用来匹配分组的内容。
- 非捕获组 (?:x) 表示不返回该组匹配的内容
- 先行断言 x(?=y) x只有在y前面才匹配,y不会被计入返回结果。比如,要匹配后面跟着百分号的数字,可以写成/\d+(?=%)/。
- 先行否定断言 ==x(?!y)==称为先行否定断言(Negative look-ahead),x只有不在y前面才匹配,y不会被计入返回结果。比如,要匹配后面跟的不是百分号的数字,就要写成/\d+(?!%)/。