正则表达式任意字符串匹配(正则表达式攻略——字符匹配)

正则表达式是匹配模式,要么匹配字符,要么匹配位置。

两种模糊匹配

横向模糊匹配

定义:一个正则可匹配的字符串的长度不是固定的,可以是多种情况的 表示:{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"]

分支结构也是惰性的,即当前面的匹配上了,后面的就不再尝试了

您可以还会对下面的文章感兴趣

使用微信扫描二维码后

点击右上角发送给好友