正则表达式是一种描述文本模式的对象,可以用某种模式去匹配一类字符串。
在JavaScript中,正则表达式通过RegExp对象来表示,RegExp对象可以使用RegExp()构造函数来创建,但更多是通过一种特殊的字面量语法来创建的。
目录
一:创建正则表达式
1.1.通过字面量语法创建
正则表达式字面量就是包含在一对斜杠“ / "字符之间的字符
let reg = /表达式/附加参数(可选)
例如:let reg = /abc/ 即匹配包含了abc的字符串
其中,字面量中的表达式必须是一个常量字符串,并且附加参数(flags)一共有6个,这些参数既可以单独使用也能以任意顺序一起使用,并且被包含在正则表达式实例中。
标志 | 描述 |
---|---|
g | 全局搜索。 |
i | 不区分大小写搜索。 |
m | 多行搜索。 |
s | 允许 . 匹配换行符。 |
u | 使用 unicode 码的模式进行匹配。 |
y | 执行“粘性 (sticky )”搜索,匹配从目标字符串的当前位置开始。 |
1.2.通过调用RegExp()构造函数创建
构造函数中的表达式可以是常量字符串, 也可以是一个js变量
let reg = new RegExp(“表达式”,”附加参数(可选)”);
二:使用特殊字符
2.1.锚点字符
^ 限定开始位置的字符
$ 限定结尾位置的字符
\b 限定单词边界的字符 即匹配\w字符和\W\字符之间或\w与字符串开头或末尾之间的位置
\B 限定非单词边界的字符
注意:[\b] 匹配退格字符
2.2.[ ]的使用
[ ]表示有一系列字符可供选择,只要匹配其中一个就可以了
[^...]匹配不在方括号中的任意一个字符
[abcdef] 这个正则表达式匹配abcdef中其中一个字母,
[0-9]匹配0到9这段区间中任意一个数字(包括0和9)
[^0-9]表示除0-9外的任意字符
[a-z]匹配a到z中任何一个小写字母
[0-9a-zA-Z]就是匹配 0到9、a到z、A到Z中任意一个字母或数字
2.3.预定义字符
\d匹配数字,相当于[0-9]
\D匹配非数字,相当于[^0-9]
\w匹配任意ASCII单词字符(字母或数字或汉字或下划线) 等价于[a-zA-Z0-9_]
\W匹配任意非字母、数字、汉字或下划线的字符
\s匹配任意Unicode空白符,如空格、换行符、制表符等
\S匹配任意不是空白符的字符
.匹配除了换行符以外的任意字符
2.4.限定字符
?匹配0次或1次 等价于{0,1}
*匹配0次或更多次 等价于{0,}
+匹配1次或更多次 等价于{1,}
{n}重复n次
{n,}匹配n次或更多次(最少n次)
{n,m}匹配n到m次之间 闭区间
2.5.特殊转义符
\f 匹配换页符
\n 匹配换行符
\r 匹配回车符
\t 匹配制表符
\v 匹配垂直制表符
\\ 匹配\
\" 匹配 "
\' 匹配 '
三:正则表达式的运算符优先级
运算符 | 描述 |
---|---|
\ | 转义符 |
(),(?:),(?=),[ ] | 圆括号和方括号 |
*, +, ?, {n}, {n,}, {n,m} | 限定符 |
^, $, \ 任何元字符、任何字符 | 定位点和序列(位置和顺序) |
| | 替换,或操作 |
四:RegExp和String的常用方法
4.1.RegExp方法
4.1.1.test(str)
用于判断字符串str是否匹配表达式,返回一个布尔值,如:
var str='abc';
var reg = /a/;
console.log(reg.test(str));//output:true
4.1.2.exec(str)
返回str中与表达式相匹配的第一个字符串,而且以数组的形式表现(未匹配到则返回 null)
var str='345abc789';
var reg = /\d+/;
console.log(reg.exec(str));//output:Array ["345"]
4.2.String方法
4.2.1.match(regexp)
返回与regexp相匹配的一个字符串数组,未匹配到则返回 null 可结合全局匹配使用
var str='345abc789';
var reg = /\d+/;
var reg2 = /\d+/g;
console.log(str.match(reg));//output:Array ["345"]
console.log(str.match(reg2));//output:Array ["345","789"]
4.2.2.search(regexp)
返回字符串中与regexp相匹配的第一个匹配的index值。没有匹配项时,返回-1。search() 方法不执行全局匹配,它将忽略标志 g
var str='345abc789';
var reg = /a/;
console.log(str.search(reg));//output:3
4.2.3.replace(regexp,str)
返回将字符串中匹配regexp的部分替换为str的一个新字符串,原字符串不会改变。
var str='345abc789';
var reg = /a/;
console.log(str.replace(reg,'b'));//output:'345bbc789'
五:常用的正则验证表达式
验证由26个英文字母组成的字符串:/^[A-Za-z]+$/
验证日期格式YYYY-MM-DD hh:mm:ss:/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2})$/
验证整数:/^[-+]?\d*$/
验证小数:/^[-\+]?\d+(\.\d+)?$/
验证中文:/^[\u0391-\uFFE5]+$/
验证邮箱:/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/
验证手机号:/^1[3456789]\d{9}$/
验证身份证:/^\d{6}(18|19|20)?\d{2}(0[1-9]|1[12])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$/