正则表达式学习总结
一、初识正则表达式
1、正则表达式用途
- 校验;
- 查找匹配;
- 替换;
- 拿到想要的字符串后执行其他想完成的字符串操作。
2、创建正则表达式
描述字符串规则的表达式
- 直接量创建
/pattern/attrs - 对象创建
new RegExp(pattern, attrs)
3、使用正则表达式
- RegExp.test(string)
- RegExp.exec(string)
- String.search(RegExp)
- String.match(RegExp)
- String.replace(RegExp/str,replacement)
二、正则表达式语法
1、直接量字符
- 字母和数字
代表自身 - 非字母的字符匹配
\o: NULL
\t, \v: 制表符,垂直制表符
\n, \r: 换行符,回车符
\f: 换页符
\xnn, \uxxxx: 十六进制数指定的拉丁/Unicode字符(不常用)
\cX: 控制字符^X(不常用)
2、字符类
- [...], [^...] —— 将直接量直接放在方括号内,表示在/不在[]内的任意字符,eg: /[0-9] [0-9]/
- . —— 除换行符和其他Unicode行终止符之外的任意字符
- \w, \W —— [a-zA-Z0-9], [^a-zA-Z0-9]
- \s, \S —— 任何/非任何Unicode空白符
- \d, \D —— [0-9], [^0-9]
- [\b] —— 退格直接量(不常用)
3、重复
- {n,m} —— 匹配前一项至少n次,最多m次,eg: /abc{2,4}/
- {n,} —— 匹配前一项至少n次,eg: /abc{2,}/
- {n} —— 匹配前一项n次,eg: /abc{2}/
- ? —— 匹配前一项0次或1次,{0,1},eg: /abc?/
- + —— 匹配前一项至少1次,{1,},eg: /abc+/
- * —— 匹配前一项0次或多次,{0,},eg: /abc*/
- 贪婪与非贪婪(?) —— 尽可能多的匹配/只匹配一个,eg: [a+?],表示匹配一个a而不用将a全部匹配到
4、选择
- | —— 选择,或,eg: /[a-z]|\d/,表示匹配小写字母或者数字
5、分组、捕获
保存匹配到的表达式,以备使用
- (...) —— 分组并捕获,eg: [abc+], [(abc)+],分别表示捕获ab和至少一个c,至少一组abc
- (?:...) —— 分组但不捕获,eg: /([1-9] [0-9])+.(?:00)/,后面的不会被捕获
- \分组序号 —— 表示要使用的分组
6、锚点
指定匹配位置
- ^, $ —— 匹配字符串开头和结尾,eg: /^1\d{10}$/
- \b, \B —— 匹配单词/非单词的边界,eg: /\bscript\b/,script前后不能跟随其他字符
- (?=p), (?!p) —— 零宽正/负向先行断言,eg: /?=script/, /?!script/
7、修饰符
高级匹配模式的规则,既可以单个使用,也可以多个组合使用
- i —— 不区分大小写,eg:/(abc)+/i
- g —— 全局匹配,eg:/(abc)+/g
- m —— 多行匹配,eg:/(abc)+/m
三、字符串上的方法
- String.prototype.match(regexp)
功能:检索字符串中能够匹配正则表达式的匹配项
参数:regexp(正则表达式对象)
返回值:返回匹配结果的数组 - String.prototype.search(regexp)
功能:执行正则表达式及string之间的搜索匹配
参数:regexp(正则表达式对象)
返回值:第一个匹配的子串的起始位置或-1
注意:不支持全局模式g - String.prototype.replace(regexp|substr,replacement)
功能:匹配字符串并用新的替换值替换掉匹配到的子串
返回值:被部分或者全部匹配替换的新字符串
参数:- regexp|substr —— 正则表达式对象或者要被替换掉的子串
- replacement —— newSubStr或者创建新子串的函数
四、RegExp对象上的方法
- RegExp.prototype.test(str)
功能:判定正则表达式与指定的字符串是否匹配
参数:str —— 用来匹配的字符串
返回值:true/false - RegExp.prototype.exec(str)
功能:在指定的字符串中执行搜索匹配,得到结果数组
参数:str —— 用来匹配的字符串
返回值:完整的匹配数组,第一个元素是匹配的字符串,余下的元素是与分组的子表达式匹配的子串
注意:此方法执行完会更新正则表达式对象中的属性lastIndex(指定下一次匹配的起始索引,使用全局检索时才生效)