正则表达式是什么:
- 复杂的字符串搜寻、替换工作,无法用简单的方式(类似借助标准库函数)达成。
- 能够帮助你进行各种字符串验证。
- 不止应用于编程语言中:JavaScript、JAVA、Perl、PHP、C#…
- 也应用于许多操作系统的主流指令中:Linux/Unix、Mac、Windows PowerScript
在我们常用的开发工具中,如Fiddler Willow、WebStorm、Vim,正则表达式也能帮助我们方便的进行Find&Replace的工作。
创建方式
在JavaScript中,我们可以通过RegExp()构造函数或者RegExp直接量两种方式去创建正则表达式。
var reg1= /s$/;
var reg2= new RegExp('s$');
上面代码中的reg1和reg2是等价的,都是用来匹配所有以字母s结尾的字符串。
直接量字符
\o:NUL字符
\t: 制表符(\u0009)
\n: 换行符(\u000A)
\v:垂直制表符(\u000B)
\f: 换页符(\u000C)
\r: 回车符(\u000D)
\xnn: 由十六进制数nn指定的拉丁字符
\uxxx:由十六进制数xxxx指定的Unicode字符
\cX: 控制字符^X
字符类
[]: 方括号内任意字符
[^]:不在方括号内的任意字符
. :除换行符和Unicode行终止符外的任意字符
\w:任何字符组成的单词,等价于[a-zA-Z0-9_]
\W:任何不是ASCⅡ字符组成的单词,等价于[^a-zA-Z0-9_]
\s:任何Unicode空白符
\S:任何非Unicode空白符,注意\w和\S的不同
\d:任何数字,等价于[0-9]
\D: 除了数字之外的任何字符,等价于[^0-9]
[\b]:退格直接量
重复字符类
{n,m}:匹配前一项至少n次,但不能超过m次
{n,}:匹配前一项n次或多次
{n}: 匹配前一项n次
?:匹配前一项0次或1次,也就是说前一项是可选的,等价于{0,1}
+: 匹配前一项1次或多次,等价于{1,}
*: 匹配前一项0次或多次,等价于{0,}
锚字符
^: 匹配字符串的开头,在多行检索中,匹配一行的开头
$:匹配字符串的结尾,在多行检索中,匹配一行的结尾
\b:匹配一个单词的边界,简而言之,就是位于字符\w和字符\W之间的位置,或位于字符\w和字符串的开头或结尾之间的位置(但需要注意的是在字符组内[\b]匹配的是退格符)
\B:匹配非单词边界的位置
(?=p):零宽正向先行断言,要求接下来的字符都与p匹配,但不能包括匹配p的那些字符
(?!p):零宽负向先行断言,要求接下来的字符不与p匹配
修饰符
i: 执行不区分大小写的匹配
g: 执行一个全局匹配,简而言之,即找到所有的匹配,而不是在找到第一个之后就停止
m:多行匹配模式,^匹配一行的开头和字符串的开头,$匹配行的结束和字符串的结束
小案例
题目:用正则表达式做邮箱验证
<script>
var str = prompt("请输入邮箱地址:");
var reg = /\w+@[0-9a-zA-Z]{2,}(\.[a-zA-Z0-9]{2,3}){1,2}/;
if(!reg.test(str)){
alert("邮箱格式为:xxx..@xxx.xxx");
}else {
alert("你的邮箱为:" + str);
}
</script>
效果如图:
成功
失败