这是我参与8月更文挑战的第14天,活动详情查看:8月更文挑战
又双是基础~我坚信每个基础扎实的xd都可以完美的结束你的任务。
认识正则
最简单的字面量方式声明正则。例:
const reg = /345/
reg.test(0123456) // true
解析: 上面的常量reg值就是我们声明的一个最简单正则表达式。包含:两条正斜杠 ‘/’ 、斜杠中间即我们要匹配的内容。通常结合正则的test方法一起使用。/ 本章主要介绍每个正则基础用法,以作了解。
正则对象的声明方式 RegExp
和字符串类型和数组类型类似,既支持字面量的生命方式也支持对象实例化的方式来声明。
var reg=new RegExp(_s+"{3}","gmi");
解析: 等价于 /abc{3}/gmi
单字符表达式
空表达式
var reg = /345/
解析: 表示包含345的正则;字符串或者数字中包含345就是符合正则。例如: 123456 或 ‘123456’
起止
^ 表示开始;$ 表示结束。
var reg1 = /^123$/;
var reg2 =/0111$/;
var reg3 =/^0111/;
解析: reg1以1开始3结束,中间是2。所以只能匹配123;reg2表示以0111结束。reg3 表示以0111开始,0111后面有或者没有都合法。
或 |
竖线 ‘|' 表示或者一般和()一起使用。
var reg=/^0(1|2|3|4)9$/
解析: 此表达式表示:中间第二位可以是1-4任意一个
或的表达式除小括号联合竖线外,还常见中括号的表达式:[1234]和[1-4] 都表示1、2、3、4中任意一个数字。
任意 .
点 '.' 表示匹配除\n和\r(回车和换行)以外的任意字符;
var reg=/^0.9$/
解析: 中间第二位可以是任意字符
转义 \
反斜杠 '' 表示转义字符:将正则中表示特定含义的某个字符转成原义;
var reg=/^\.$/
解析: 只匹配小数点。
组合字符
任意数字 \d
\d 只表示一位数字
var reg=/^\d$/
解析: 表示: 0-9之间任意一个数字。和(0|1|2|3|4|5|6|7|8|9)/[0123456789]/[0-9]这几个含义相同。
非数字字符 \D
表示任意一个非数字字符
var reg=/^\D$/
解析:可以匹配任意特殊字符和数字。有\d取反的意思,等同于[^0-9]
/^./ 范围相同。
单词字符 \w
单词字符:字母或数字或下划线中的任意一个字符
var reg=/^\w$/
解析:等同于 /^[a-z0-9_]$/ ;并不包含除下划线外的特殊字符。
非单词字符 \W
var reg=/^\W$/
解析: 同样和\w有点取反的意味;/^[\w\W]/
空白字符 \s
匹配一个空白字符,包括空格、制表符、换页符和换行符。
var reg=/^\s$/
等价于[ \f\n\r\t\v\u00a0\u1680\u180e\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]
非空白字符 \S
匹配一个非空白字符。
var reg=/^\S$/
花括号 {}
表示范围;表示花括号前面紧挨着的字符出现的次数
var reg1 = /^asd{1,3}$/
var reg2 = /^asd{1,}$/
var reg3 = /^asd{1}$/
解析:
{m,n} m<n {}前面紧挨着的字符至少出现m次 至多出现n次
{m,} m>=0 {}前面紧挨着的字符出现的次数至少出现m次
{m} m>0 {}前面紧挨着的字符只能出现m次
加号 '+' 等价 {1,} 至少出现一次;
问号 '?' 等价 {0,1} 最多出现一次;
星号 '*' 等价 {0,} 至少出现零次。
中括号 []
表示括号内的任意一个字符
var reg1 = /^[abcd]$/
var reg2 = /^[0-9]$/
var reg3 = /^[a-z]$/
var reg4 = /^[a-zA-Z]$/
解析: 上面的例子中提前提到过中括号;
[\u4e00-\u9fa5] 表示任意一个中文
() 表示优先级最高
中括号中添加上尖符号 ‘^’ 表示一个反向字符集。也就是说, 它匹配任何没有包含在方括号中的字符。
中括号中可使用中横线 ‘-’ 来指定一个字符范围。
修饰符 igm
var reg1 = /^[abcd]$/i
var reg2 = /^[0-9]$/ig
var reg3 = /^[a-z]$/igm
解析: 在匹配的过程中可以忽略大小写、全局匹配等操作。
g:global 全局匹配(多见于字符串replace方法中)
m:multiple 多行匹配
i:ignore 忽略大小写
应用
本节简单介绍下正则对象相关的常见操作方法
test
reg.test(str) 测试一个字符串是否满足某个正则规范
// 略
exec
reg.exec() 利用正则的规范去字符串中查找 返回长度为1的数组
var str = "今天23的天35气挺6好";
var reg = /\d+/;
console.log( reg.exec( str ) );结果为["23"]
解析: /\d+/g; 即使加上全局搜索,结果也是一样;
match
str.match(reg) 利用正则的规范去字符串中查找匹配值,并返回一个数组
var str = "今ab天23ER天35气挺6好 rwr10度";
var reg = /\d+/g;
console.log(str.match(reg))
//["23", "35", "6", "10"]
var reg = /\d+/ 如果不添加全局搜索,那只能返回第一次的匹配值的信息
search
str.search(reg) 返回符合正则规范的字符在原字符串中首次出现的索引
var str = "今天323的天降了10度";
var reg = /\d+/g;
console.log(str.search( reg ));
// 2
解析: 第一次匹配到的数字是323,而第一个3的索引是2;
字符串中的replace替换字符常和正则搭配使用,例如:string.replace(reg , '') 返回值为替换后的新字符串。
密码强度
附赠一个关于密码强度的正则表达式
if (/[a-zA-Z]+/.test(password) && /[0-9]+/.test(password) && /[\W_]+/.test(password)) {
//强
} else if (/^[a-zA-Z]+$/.test(password) || /^[0-9]+$/.test(password) || /^[\W_]+$/.test(password)) {
//弱
} else {
//中
}