Skip to content

正则第一篇(字符匹配攻略)

正则表达式是匹配模式,要么匹配字符,要么匹配位置.请记住这句话

内容

  • 两种模糊匹配

  • 字符组

  • 量词

  • 分支结构

  • 案例分析

两种模糊匹配

如果正则只有精确匹配是没太大意义的,比如/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"]