正则表达式学习过屡次,然而过一阵子就忘记了,要用的时候又想不起来。今天抽空作了一下正则的整理,方便之后的复习和查阅。正则表达式
^向上尖头学习
当^放在[]里面,表示取反;放在[]外面,表示一行的字符串的开头code
eg: /^[^a-b]w+/
匹配不是a或b开头的字符串ip
点号 .字符串
在方括号里:匹配任意一个字符(除了\n)io
在方括号外:匹配任何字符。若是要想表示点号自己,要转义一下 .console
\d
匹配数字,等价于[0-9]
function
\D
匹配一个非数字,等价于 [^0-9]
登录
\s
匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [\f\n\r\t\v]
基础
\w
匹配数字或字母或下划线,等价于 [A-Za-z0-9_]
\W
匹配非数字和字母和下划线,等价于 [^A-Za-z0-9_]
星号 * (数量限定符)
匹配前面的子表达式出现0次或者无限次,等价于{0,}
加号 + (数量限定符)
匹配前面的子表达式出现1次或者屡次,等价于{1,}
?
匹配前面的子表达式出现0次或者1次,等价于{0,1}
{m}
匹配前面的子表达式出现m次
{m,} (数量限定符)
匹配前面的子表达式至少出现m次
{m,n}
匹配前面的子表达式出现最少m次,最多n次
$
匹配字符串结尾
b
匹配单词的开始或结束
B
匹配单词的非开始和结束
方括号[]
[]表示"或"逻辑
eg: [abc]表示a或者b或者c
括号()
单独使用: 表示分组
括号里面有 | :表示或逻辑
正向和反向断言
(?=pattern) (?!pattern) (?<=pattern) (?<!pattern)
短线- 在方括号中
当-在第一个字符时,表示自己;不在第一个字符时,表示区间[a-p]
表示从a到p
正则表达式中包含数量修饰符时,会尽量多的匹配字符。
/a.*b/,它将会匹配最长的以a开始,以b结束的字符串。好比字符串aabab,它会匹配整个字符串。
将贪婪匹配转化为懒惰匹配:
数量限定符后加问号
正向确定:(?=pattern)
正向否认:(?!pattern)
反向确定:(?<=pattern)
反向否认:(?<!pattern)
断言能够叠加使用
登陆密码的例子:
包含大小字母和数字,至少8位
let reg = /^(?=.*?[a-z])(?=.*?[A-Z])(?=.*?[d])[a-zA-Zd]{8,}/g
这个正则表达式,前面三个括号里是三个正向断言,即,字符串需知足,从开头开始,知足 /.*?[a-z]/
,/.*?[A-Z]/
和 /.*?[d]/
。即同时知足。有大写字母,小写字母,数字。
1,千分制表达式:
思路:找到三个数字前面的那个数,给这个数后面加个逗号
str.replace(/(d)(?=(d{3})+$)/g, function ($1) { console.log($1) return $1 + ',' })
2, 手机号中间加掩码
思路:须要匹配的那一项,后面是四个数字
str.replace(/(d{3})(?=d{4}$)/, '***')
3,去掉先后的空格
方法一:
思路:字符串的开头字符和末尾字符
tip:若是每加g修饰符,将只会去掉str开头的空格
str.replace(/(^s*)|(s*$)/g, '')
方法二:
思路:要匹配的那一项,先后是空格
tip:子项(.*?)中的问号不能去掉,去掉后会进行末尾的空格将去不掉
str.replace(/^[s]*(.*?)[s]*$/, '$1')
后面会再补充一下非获取匹配 和 正则表达式的例子。