- 分组改变x|y的默认优先级
var reg = /^18|19$/;
// 18、19、181、189、119、819、1819......
var reg = /^(18|19)$/;
// 18、19
- 分组引用
\2代表和第二个分组出现一摸一样的内容;\1和第一个分组出现一摸一样的内容;
这里的“一模一样”:和对应的分组中的内容的值都要一样。
var reg = /^(\w)\1(\w)\2$/;
console.log(reg.test("zzff")) // true
console.log(reg.test("z0f_")) // false
// \w表示数字、字母、下划线中的任意一个字符 相当于[0-9a-zA-Z_]
- 分组捕获
正则在捕获的时候,不仅仅把大正则匹配的内容捕获到,而且还可以把小分组匹配的内容捕获到
(?:)在分组中?:的意思是只匹配不捕获
var reg = /^(\d{2})(\d{4})(\d{4})(\d{2})(\d{2})(?:\d{2})(\d)(?:\d|x)$/;
var str = "142726199009181211";
// console.log(reg.exec(str));
// ary = ["142726199009181211", "14", "2126", "1990", "09", "18", "1", index: 0, input: "142726199009181211"]
// ary[0] -> 大正则匹配的内容
// ary[1] -> 第一个分组捕获的内容
// ary[2] -> 第二个分组捕获的内容
// ...
// console.log(str.match(reg)); // 和exec获取的结果是一样的
match和exec的区别:
var reg = /zhufeng(\d+)/g;
var str = "zhufeng1234zhufeng3456zhufeng5678";
// 我们用exec执行三次,每一次不仅仅把大正则匹配的获取到,而且可以获取第一个分组匹配的内容
console.log(reg.exec(str)); // -> ["zhufeng1234","1234"...]
console.log(reg.exec(str)); // -> ["zhufeng3456", "3456"...]
console.log(reg.exec(str)); // -> ["zhufeng5678", "5678"...]
// 而match只能捕获大正则匹配的内容
console.log(str.match(reg)); // -> ["zhufeng1234", "zhufeng3456", "zhufeng5678"]
网友评论