一、什么是正则?
字符串中字符的规则
二、正则的作用
验证
查找与替换
三、学习过程
1.如何写正则?
(1)任何一个字符串都是匹配和自己完全一样的正则
(2)匹配一堆字符中的其中一个
例:[abcde]-->匹配abcde的其中一个
注:一个中括号匹配到的是一个字符
(3)匹配给出字符以外的字符
例:[^abcde]-->匹配abcde以外的一个字符
(4)简写“到”:-
例:[a-z]匹配一位小写字母
同理还有大写字[A-Z],数字[0-9]
注:使用“-”必须保证按照ASCII顺序
比如[a-z]是正确的,[z-a]就是错误的
因为ASCII表中a在z的前面
练习1:匹配一位字母(大写小写都要匹配到)
[a-Z]报错,在ASCII中Z在a的前面
[A-z]会匹配进来一些其他字符,因为表中z-A之间还存在其他字符
正确写法:
[a-zA-Z]或者[A-Za-z]
练习2:匹配一位字母(大小写)或则数字
[a-zA-Z0-9]
(5)量词{n}个
3个小写字母[a-z]{3}
手机号:
1[3-9][0-9]{9}
量词区间
3-6位数字[0-9]{3,6}
3位以上小写字母[a-z]{3,}
注:量词区间中,前面的数字不可省略
6位以下大写字母[A-Z]{,6}是错误的
分情况看是否可以没有,进而写出区间{1,6}或者{0,6}
特殊的:0次或1次 ?
手机号:在号码前,可能会出现+86(只会出现一次)
(\+86)?1[3-9][0-9]{9}
注:\代表转义,使用字符的另外一个含义
(\+86)是一个整体需要用小括号包裹
特殊的:至少一次 +
至少一位数字开头,后面跟三位小写字母
[0-9]+[a-z]{3}
特殊的:任意次 *
匹配单标签
<至少一位字母 任意次数的数字 /至少一次>
<[a-zA-Z]+[0-9]*/?> (6)一些常见的转义
\d 一位数字 等同于 [0-9]
\D 一位非数字 等同于 [^0-9]
\w 一位数字字母下划线 等同于 [_0-9a-zA-Z]
\W 一位非数字字母下划线 等同于 [^_0-9a-zA-Z]
\s 一位任意形式的空格
\S 一位非任意形式的空格
特殊字符:. 匹配任意字符 (7)边界符
^(写在[]外面)比满足正则的字符串开头
\d{3}{a-z}{2}
xxx123ab 可以匹配
^\d{3}{a-z}{2}
xxx123ab 不可匹配
$ 必须以满足正则的字符串结尾
没有边界符,在整个字符串中,只有出现满足正则的字符串就可匹配
^ 满足正则字符串只要出现在整个字符串开头即可,后面的内容无所谓
$ 满足正则字符串只要出现在整个字符串结尾即可,前面的内容无所谓
在做验证时,要求整个字符串必须全部满足正则,不能有多余内容,就把^和$一起使用
练习:验证手机号
^(\+86)?1[3-9][0-9]{9}$
2.如何使用正则
声明正则
var reg = / 正则表达式 / 修饰符
i 不区分大小写
g 全局匹配,用于查找和替换
注:1.验证时,使用^$
2.查找和替换时使用g
3.边界符与g互斥
//声明正则
var reg0 = /[a-z]{3}/
var reg1 = /^[a-z]{3}$/
var reg2 = /[a-z]{3}/i
var str0 = 'abc'
var str1 = 'abc'
var str2 = 'Abc'
console.log(reg0.test(str0))
//true 没有边界符,字符串中可以有多余的内容
console.log(reg1.test(str0))
//false 有边界符,不允许有多余内容
console.log(reg1.test(str1))
//true
console.log(reg0.test(str2))
//false 不使用修饰符i,验证时区分大小写
console.log(reg2.test(str2))
//true 使用修饰符i,验证时不区分大小写