注:以下全为正则使用实例,耐心阅读足以快速学习并掌握正则的书写。
代码实例大部分源自书籍:《JavaScript正则表达式迷你书》
1.字符匹配
精确匹配
var reg = /girls/ console.log(reg.test('so many girls')) // => true
模糊匹配
1.横向模糊匹配
横向模糊指的是,一个正则可匹配的字符串的长度不是固定的,可以是多种情况的。
比如正则 /ab{2,5}c/
表示匹配这样一个字符串:第一个字符是 "a",接下来是 2 到 5 个字符 "b",最后
是字符 "c"。
var regex = /ab{2,5}c/g; var string = "abc abbc abbbc abbbbc abbbbbc abbbbbbc"; console.log( string.match(regex) ); // => ["abbc", "abbbc", "abbbbc", "abbbbbc"]
2.纵向模糊匹配
纵向模糊指的是,一个正则匹配的字符串,具体到某一位字符时,它可以不是某个确定的字符,可以有多种可能。
比如 /a[123]b/
可以匹配如下三种字符串: "a1b"、"a2b"、"a3b"。
var regex = /a[123]b/g; var string = "a0b a1b a2b a3b a4b"; console.log( string.match(regex) ); // => ["a1b", "a2b", "a3b"]
2.字符组
注:需要强调的是,虽叫字符组(字符类),但只是其中一个字符。
例如 [abc],表示匹配一个字符,它可以是 "a"、"b"、"c" 之一。
范围表示法
[123456abcdefGHIJKLM],可以写成 [1-6a-fG-M]。用连字符 - 来省略和简写。
排除字符组
排除字符组(反义字符组)的概念。例如 [^abc],表示是一个除 "a"、"b"、"c"之外的任意一个字符。字符组的第一位放 ^(脱字符),表示求反的概念。
当然,也有相应的范围表示法。
常见的简写形式
字符组 具体含义 \d 表示 [0-9]。表示是一位数字。记忆方式:其英文是 digit(数字)。 \D 表示 [^0-9]。表示除数字外的任意字符。 \w 表示 [0-9a-zA-Z_]。表示数字、大小写字母和下划线。记忆方式:w 是 word 的简写,也称单词字符。 \W 表示 [^0-9a-zA-Z_]。非单词字符。 \s表示 [ \t\v\n\r\f]。表示空白符,包括空格、水平制表符、垂直制表符、换行符、回车符、换页符。记忆方式:s 是 space 的首字母,空白符的单词是 white space。 \S 表示 [^ \t\v\n\r\f]。 非空白符。 .表示 [^\n\r\u2028\u2029]。通配符,表示几乎任意字符。换行符、回车符、行分隔符和段分隔符除外。记忆方式:想想省略号 … 中的每个点,都可以理解成占位符,表示任何类似的东西。 如果要匹配任意字符怎么办?可以使用 [\d\D]、[\w\W]、[\s\S] 和 [^] 中任何的一个。
3.量词
量词也称重复。掌握 {m,n} 的准确含义后,只需要记住一些简写形式。
简写形式
{m,} 表示至少出现 m 次。 {m} 等价于 {m,m},表示出现 m 次。 ?等价于 {0,1},表示出现或者不出现。记忆方式:问号的意思表示,有吗? +等价于 {1,},表示出现至少一次。记忆方式:加号是追加的意思,得先有一个,然后才考虑追加。 *等价于 {0,},表示出现任意次,有可能不出现。 记忆方式:看看天上的星星,可能一颗没有,可能零散有几颗,可能数也数不过来。
贪婪匹配与惰性匹配
正则 /\d{2,5}/,表示数字连续出现 2 到 5 次。会匹配 2 位、3 位、4 位、5 位连续数字。
var regex = /\d{2,5}/g; var string = "123 1234 12345 123456"; console.log( string.match(regex) ); // => ["123", "1234", "12345", "12345"]
但是其是贪婪的,它会尽可能多的匹配。你能给我 6 个,我就要 5 个。你能给我 3 个,我就要 3 个。
反正只要在能力范围内,越多越好。
而惰性匹配,就是尽可能少的匹配:
var regex = /\d{2,5}?/g; var string = "123 1234 12345 123456"; console.log( string.match(regex) ); // => ["12", "12", "34", "12", "34", "12", "34", "56"]
其中 /\d{2,5}?/ 表示,虽然 2 到 5 次都行,当 2 个就够的时候,就不再往下尝试了。
通过在量词后面加个问号就能实现惰性匹配,因此所有惰性匹配情形如下:
待续....
🎨 原创不易,支持请点赞、转载请注明本文作者为子成君