正则表达式是匹配模式,要么匹配字符,要么匹配位置。
两种模糊匹配
横向模糊匹配定义:一个正则可匹配的字符串的长度不是固定的,可以是多种情况的 表示:{m,n},表示连续出现最少m次,最多n次 例子:比如正则 /ab{2,4}c/ 匹配:abbc/abbbc/abbbbc
纵向模糊匹配定义:一个正则匹配的字符串,具体到某一位字符时,它可以不是某个确定的字符 表示:[abc],表示该字符可以是字符"a"、"b"、"c"中的任何一个。 例如:比如 /a[123]b/ 匹配:a1b/a2b/a3b
字符组
范围表示法纵向匹配 虽叫字符组,但还是只匹配一个字符
使用场景:字符组里相邻的字符特别多可以使用范围表示法 例如:123456abcdefgHIGKLMN,可以简写成[1-6a-gH-N] 注意:只匹配'a' '-' 'z'这三个字符,不能写成[a-z]这种写法,可以写成[-az]或[az-]或[a-z]
排除字符组场景:纵向匹配 某一位不能是'a' 'b' 'c'这三个字符其中的一个 例子:[^abc]
简写形式字符组 具体含义 d [digit] [0-9],一位数字 D [^0-9],0-9之外的任意一位字符 w [word] [0-9a-zA-Z_],单词字符 W [^0-9a-zA-Z_],非单词字符 s [space] [tvnrf],空白符,包括空格、水平制表符、垂直制表符、换行符、回车符、换页符 S [^tvnrf] 非空白符 . [^nru2028u2029] 通配符
量词
简写形式量词也称重复
量词 含义 {m,} 至少出现m次 {m} 等价 {m,m} 出现固定m次 ? 等价 {0,1} 表示可出现可不出现 + 等价 {1,} 表示至少出现一次 * 等价 {0,} 表示出现任意次,有可能不出现
贪婪匹配与惰性匹配- 贪婪匹配:尽可能多的匹配
var regex = /d{2,5}/g;
var test = "123 1234 12345 123456";
console.log(test.match(regex)); // ["123", "1234", "12345"]
- 惰性匹配:尽可能少的匹配
var regex = /d{2,5}?/g;
var test = "123 1234 12345 123456";
console.log(test.match(regex)); // ["12", "12", "34", "12", "34", "12", "34","56"]
- 通过在量词后面加个问号就能实现惰性匹配
惰性量词 贪婪量词 {m,n}? {m,n} {m,}? {m,} ? ? +? + *? *
多选分支
一个模式可以实现横向和纵向模糊匹配,而多选分支可以支持多个子模式任选其一。 具体形式如下:(p1|p2|p3)
- 不同字符
var regex = /good|nice/g;
var test = "good idea, nice try.";
console.log( test.match(regex) ); // ["good", "nice"]
- 具有相同字符
var regex = /good|goodbye/g;
var test = "goodbye";
console.log( test.match(regex) ); // ["good"]
- 改变位置
var regex = /goodbye|good/g;
var test = "goodbye";
console.log( test.match(regex) ); // ["goodbye"]
分支结构也是惰性的,即当前面的匹配上了,后面的就不再尝试了