正则-分组捕获

  1. 分组改变x|y的默认优先级
var reg = /^18|19$/;
// 18、19、181、189、119、819、1819......
var reg = /^(18|19)$/;
// 18、19
  1. 分组引用
    \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_]
  1. 分组捕获
正则在捕获的时候,不仅仅把大正则匹配的内容捕获到,而且还可以把小分组匹配的内容捕获到

(?:)在分组中?:的意思是只匹配不捕获

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"]
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容