前言
正则表达式大家肯定都不陌生,平时用到复杂正则的时候直接用工具或者百度,但是正则基础还是要掌握的,本节我们就来看一下正则中的模糊匹配。
模糊匹配
正则表达式是一种匹配模式,用来匹配位置或字符,具体的匹配可以分为精确匹配与模糊匹配,就像精确查询与模糊查询。精确匹配的就是整体,当字符完全匹配时才会被匹配到:
const reg = /abc/ //精确匹配出abc
模糊匹配就让正则有了更多的可能,模糊匹配可以从两个方向区分——横向与纵向:
- 横向:横向模糊表示匹配字符的长度有多种情况。要想实现这种匹配用到的就是量词,字符长度不是固定,而量词可以指定表达式出现的范围,匹配出来的字符也有多种情况。量词用花括号表示,比如{m,n}表示出现的次数为m-n。
//加上全局匹配 不然只能匹配一次
const reg = /a{1,2}/g;
const str = 'a aa ab bb';
console.log(str.match(reg)); //['a', 'aa', 'a']
- 纵向:纵向模糊表示可以匹配的字符有多种情况,跟横向不同,纵向强调字符的多样化。纵向的实现是运用字符组,字符组用括号表示,里面的字符表示一种匹配的字符,[ab]表示就是匹配字符是a或者b。
const reg = /[ab]b/g;
const str = 'a aa ab bb';
console.log(str.match(reg)); //['ab', 'bb']
上面例子中用到了修饰符——g,global的缩写,代表着全局匹配,会在字符串中找到所有满足条件的字符串,上面匹配结果都为数组,也是因为这个原因,如果不加g就只会匹配到第一个满足条件的字符,同时返回的也是数组。
const reg = /[ab]b/;
const str = 'a aa';
console.log(str.match(reg)); //['ab', index: 5, input: 'a aa ab bb', groups: undefined]
总结
我们要认识到正则匹配模式就是匹配位置或字符,有了这个思路再去看正则或许会有着柳暗花明又一村的感觉,横向与纵向是通过量词与字符组实现的。