目录
一、正则 简介
正则:
是用来处理(匹配)字符串的;正则是单独的一套语法体系
1.1、元字符
元字符:
在正则中有特殊语义的字符:. [] [^] ? * + {min,max} ^ $ () \1\2 | ;
1.2、转义字符:\
当匹配的字符中有特殊语义的字符时,需要用到转义字符(\)。
二、字符分组 : [ ]
用 [ ] 表示分组,在固定范围内匹配 一个 字符;注意字符组的顺序(根据ASCII表);[^] 范围取反。
test() 方法: 是一个正则表达式方法,用于检测一个字符串是否匹配某个模式,如果字符串中含有匹配的文本,则返回 true,否则返回 false
简写:
- \d 表示 [0-9] ;\D 表示 [^0-9]
- \w 表示 [0-9A-Za-z] ; \W 表示 [^0-9A-Za-z]
- \s 表示 [\f\n\r\t] 等空白符 ; \S 表示 取反
// /[123456789]/ : 匹配模式,
// 在范围 1 2 3 4 5 6 7 8 9 字符中,是否存在 '9'
console.log(/[123456789]/.test('9')); //true
// 当然,1 至 9 的9个字符范围还可以这样表示:[1-9]
console.log(/[1-9]/.test('9')); //true
// 简写
console.log(/\d/.test('9')); //true
//注意字符组的顺序
console.log(/[9-1]/.test('9')); //报错
三、量词 { }:匹配多个字符,修饰个数
情景需要:
匹配一个字符,我们可以用字符组来匹配,比如 /[1-9]/.test(‘9’) 匹配一个数字字符;那如果我要匹配 3 个数字呢?
唉,办法是有的:
console.log(/[1-9][1-9][1-9]/.test('953')); //true
那匹配 100 个呢?(狗头···),我们可以用量词管它是几个葫芦娃。
形如 /\d{100}/ 表示 匹配 100个数字字符
当量词出现范围的时候:{min,max} : 出现至少min 次,最多 max 次(max为空表示不限,无限次)
3.1、量词范围格式
({} 内不要有空格,为了好看下面罗列的格式里有空格)
- { n } 表示 匹配 n 次
- { n ,m} 表示 匹配至少 n ,最多 m 次
- { n ,} 表示 至少 n , 最多不限次
简写:
- /\d+/ 加号 表示:至少一次;{1,}
- /\d?/ 问号 表示:0 或者1次;{0,1}
- /\d*/ 星号 表示:不限次数; {0,}
3.2、默认的匹配模式:贪婪模式
当我们量词设为 {2,5}的时候:可以发现,它会尽量多的去匹配字符,是因为它默认的匹配模式是贪婪模式。
贪婪模式:能多就多,意味着我们给一个匹配次数的范围,它会匹配到最大值次数
console.log(/\d{2,5}/.exec('953'));
console.log(/\d{2,5}/.exec('95345678'));
//打印结果:
[ '953', index: 0, input: '953', groups: undefined ]
[ '95345', index: 0, input: '95345678', groups: undefined ]
3.3、非贪婪模式:能少就少
- 注意啊,这里不是取反 ^ 操作啊,非贪婪模式指的是范围内的最小的次数。
正确操作:量词后面 追加 ?
console.log(/\d{2,5}?/.exec('953'));
console.log(/\d{2,5}?/.exec('95345678'));
四、总结
学习到这里,使用正则表达式匹配简单的字符串,就差不多了。