正则第一篇(字符匹配攻略)
正则表达式是匹配模式,要么匹配字符,要么匹配位置.请记住这句话
内容
两种模糊匹配
字符组
量词
分支结构
案例分析
两种模糊匹配
如果正则只有精确匹配是没太大意义的,比如/hello/
也只能匹配字符串中的hello
这个子串
js
var regex = /hello/;
console.log(regex.test("hello"));
// true
正则表达式之所以强大,是因为其能实现模糊匹配
而模糊匹配,有两个方向上的"模糊",横向和纵向模糊
横向模糊匹配
横向模糊指的是, 一个正则可匹配的字符串的长度是不固定的,可以是多种情况
其实现的方式是使用量词.譬如 {m,n}
表示连续出现最少 m 次,最多 n 次
比如正则/ab{2,5}c/
表示匹配这样一个字符串,第一个字符是a
,接下来是 2 到 5 个字符b
,最后是字符c
其可视化形式如下:
测试如下:
js
var regex = /ab{2,5}c/g;
var string = = "abc abbc abbbc abbbbc abbbbbc abbbbbbc";
console.log(string.match(regex)); // 返回一个数组
// ["abbc", "abbbc", "abbbbc", "abbbbbc"]
INFO
案例中使用的正则是/ab{2,5}c/g
,其中g
是正则的一个修饰符,表示全局匹配 即,在目标字符串中按顺序找到满足匹配模式的所有子串,强调的是所有,而不只是"第一个" g 是单词 global 的首字母缩写
纵向模糊匹配
纵向模糊指的是,一个正则匹配的字符串,具体到某一位字符的时候,它 可以不是某个确定的字符,可以有多种可能
其实现的方式是使用字符组,譬如[abc]
表示该字符是可以字符a
,b
,c
中任何一个
比如/a[123]b/
可以匹配如下三种字符串 :a1b
,a2b
,a3b
其可视化形式如下:
测试如下:
js
var reegex = /a[123]b/g;
var string = "a0b a1b a2b a3b a4b";
console.log(string.match(regex)); // 返回一个数组
// 结果 ["a1b", "a2b", "a3b"]