参考地址
\d 匹配一个数字
\w 匹配一个字母或数字
'00\d'可以匹配'007',但无法匹配'00A';
'\d\d\d'可以匹配'010';
'\w\w'可以匹配'js';
. 可以匹配任意字符
'js.'可以匹配'jsp'、'jss'、'js!'等等
* 任意个字符(包括0个)
+ 表示至少一个字符
? 表示0个或1个字符
{n} 表示n个字符
{n,m}表示n-m个字符
\s 匹配一个空格(也包括Tab等空白符)
\s+表示至少有一个空格,例如匹配' ','\t\t'等;
\d{3}\s+\d{3,8}
3个数字
至少有一个空格 例如' ','\t\t'
3-8个数字
进阶
[0-9a-zA-Z_]可以匹配一个数字、字母或者下划线
[0-9a-zA-Z_]+可以匹配至少由一个数字、字母或者下划线组成的字符串
[a-zA-Z_$][0-9a-zA-Z_$]*可以匹配由字母或下划线、$开头,后接任意个由一个数字、字母或者下划线、$组成的字符串,也就是JavaScript允许的变量名
[a-zA-Z_$][0-9a-zA-Z_$]{0, 19}更精确地限制了变量的长度是1-20个字符
A|B 匹配A或B
(J|j)ava(S|s)cript
^ 表示行的开头
^\d 表示必须以数字开头。
$ 表示行的结束
\d$ 表示必须以数字结束。
两种写法
var re1 = /ABC\-001/;
var re2 = new RegExp('ABC\\-001');//符串的两个\\实际上是一个\
re1; // /ABC\-001/
re2; // /ABC\-001/
判断是否匹配
var re = /^\d{3}\-\d{3,8}$/;
re.test('010-12345'); // true
re.test('010-1234x'); // false
re.test('010 12345'); // false
切分字符串
'a b c'.split(' '); // ['a', 'b', '', '', 'c']
'a b c'.split(/\s+/); // ['a', 'b', 'c']
'a,b, c d'.split(/[\s\,]+/); // ['a', 'b', 'c', 'd']
'a,b;; c d'.split(/[\s\,\;]+/); // ['a', 'b', 'c', 'd']
分组
提取字符串
var re = /^(\d{3})-(\d{3,8})$/;
re.exec('010-12345'); // ['010-12345', '010', '12345']
re.exec('010 12345'); // null
识别合法时间
var re = /^(0[0-9]|1[0-9]|2[0-3]|[0-9])\:(0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]|[0-9])\:(0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]|[0-9])$/;
re.exec('19:05:30'); // ['19:05:30', '19', '05', '30']
贪婪匹配
正则匹配默认是贪婪匹配,也就是匹配尽可能多的字符
var re = /^(\d+)(0*)$/;// \d+采用贪婪匹配,直接把后面的0全部匹配了,结果0*只能匹配空字符串
re.exec('102300'); // ['102300', '102300', '']
加?让\d+采用非贪婪匹配
var re = /^(\d+?)(0*)$/;
re.exec('102300'); // ['102300', '1023', '00']
全局搜索
g 表示全局匹配
多次执行exec()方法来搜索一个匹配的字符串
var r1 = /test/g;
// 等价于:
var r2 = new RegExp('test', 'g');
var s = 'JavaScript, VBScript, JScript and ECMAScript';
var re=/[a-zA-Z]+Script/g;
// 使用全局匹配:
re.exec(s); // ['JavaScript']
re.lastIndex; // 10
re.exec(s); // ['VBScript']
re.lastIndex; // 20
re.exec(s); // ['JScript']
re.lastIndex; // 29
re.exec(s); // ['ECMAScript']
re.lastIndex; // 44
re.exec(s); // null,直到结束仍没有匹配到
全局搜索不能使用/^...$/
i 示忽略大小写
m 表示执行多行匹配
练习 验证Email地址的正则表达式
var re = /^\w+[\w.]*@\w+\.\w+$/;
验证并提取出带名字的Email地址
var re = /^<(\w+\s\w+)>\s(\w+[\w.]*@\w+\.[a-zA-Z]*)$/;