正则表达式就是 一个用于查找的 含有 匹配字符串 或 匹配元字符的 字符串。
正则表达式对象 就是 由 正则表达式创建的对象, 该对象可以进行 匹配, 提取 和 替换。
创建正则表达式对象有两种方式:
- 构造函数:
var reg = new RegExp();
console.dir(reg);
输出结果为:
- 字面量:
// var regex = /正则表达式/;
var reg1 = /heygirl/
console.log(reg1);
var str = '1234679heygirlasdfqwe'
console.log(reg1.test(str));
输出结果为:
案例:
- 写一个正则表达式匹配 身份证号码;
分析:身份证是 18 位数字;省 市 区 出生年月 随机编码X
1) 首先是要做匹配, 就一定要使用 ^ $;
2) 是 18 位数字( 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ).。可以使用 [0123456789],还可以使用0|1|2|3|4|5|6|7|8|9;
3) 要求是 18 位. 限定 18 位, 即 {18}。
//匹配身份证,18位,开头不为0
var reg = /^[1-9][0-9]{16}[0-9X]$/;
var str = '42077719990616772X';
var a = reg.test(str);
console.log(a);
- 匹配邮箱;
分析:名字 @ 主机名
1) 是要验证邮箱, 那么就需要使用 ^ $;
2) 名字:数字与字母;
3) 主机名:主机名也是一串字符串或数字,但是它多了一个 .com .cn
//匹配邮箱
var reg = /^[0-9a-zA-Z]+@[0-9a-zA-Z]+(\.com)$/
var str = '9645@126.com'
var a = reg.test(str);
console.log(a);
- 匹配一个指定范围的数字;
分析:匹配 0 ~ 255 为例
如果要匹配指定范围的数字, 那么需要将字符串结构进行分类:
1) 0 要匹配的, 所以在正则表达式中有 0 这一项;
2) 任意的 2 位数, 即 [1-9][0-9];
3) 任意的 1 位数, 即 [0-9], 可以将 第 1) 结论合并;
4) 考虑 3 位数的时候, 只允许出现 1xx 的任意数, 而 2xx 的有限制
因此在分组, 考虑 1xx 的任意数, 可以写成: 1[0-9][0-9];
5) 考虑 2xx 的数字, 在 200 到 250 之间允许任意取. 所以写成: 2[0-4][0-9];
6) 考虑 250 到 255, 写成 25[0-5]。
//随机输出0-255
var reg = /^([0-1]|[0-9][0-9]|2[0-4][0-9]|25[0-5])$/
var str = '56'
var a = reg.test(str);
console.log(a);
提取
使用正则表达式可以进行匹配, 使用 exec 可以将匹配到的数据提取出来。
语法:正则表达式对象.exec( 字符串 ) -> 封装成数组
循环提取在一个字符串中将所有复合的要求的字符串提取出来。
1> 正则表达式需要使用全局模式;
var r = new RegExp( '正则', 'g' );
var r = /正则/g;
2> 调用 exec 首先获得第一个匹配项;再调用一次该方法, 就可以获得 第二个匹配项;一直调用下去, 就可以得到所有的匹配项;直到最后全部匹配完, 如果还用该方法, 则返回 null。
案例
在 ‘abc123def456ghij789klum’ 提取数字。
var str = 'abc123def456ghij789klum';
var reg = /\d+/g;
var arr;
while (arr = reg.exec(str)) {
console.log(arr);
}