正则的分组

正则分组的作用:

1.改变优先级

2.分组引用

3.分组捕获

细说下.

1.改变优先级

var reg = /^x|y$/;
var regg = /^(x|y)$/;

var str = "x1";
reg.test(str); // true,这里其实匹配以x开头或者以y结尾
regg.test(str); // false,这里其实匹配x或者y

2.分组引用

2表示第二个分组,1表示第一个分组,但是2必须在出现在第二个分组的后面,因为只有知道第二个分组是,我才知道2是啥

这里特别注意,2的内容和第二个分组的内容必须一模一样

举例说明

var  reg = /(d)([a-z])1([A-Z])2/;
// 这里有3个分组,1可以等价于(d)所表示的值,也就d表示2,那么1也就只能是2而不能是3

var str = "4a4Aa";
var str1 = "4a3Aa";
reg.test(str); // true
reg.test(str); // false 这里的1只能是4

3.分组捕获

正则捕获的时候不仅把大正则匹配的内容捕获到还能把小正则的内容捕获到

还有一个规则要记得,(?:)在分组中?:的意思是只匹配不捕获,注意的是如果用了这个,表示这个分组就不会产生引用

var reg =/(d)(?:[a-z])([A-Z])2/;
// 这里的第二个分组用了?:,所以不产生引用,也就2表示第三个分组([A-Z])
reg.test("1aAA"); // true
reg.test("1aAa"); // false

接下来用exec

var reg =/(d)(?:[a-z])([A-Z])2/;
reg.exec("1aAA"); // ["1aAA", "1", "A"]
// 第一项表示大正则,接下来就是小正则也就是小分组的内容
"1aAA".match(reg); // ["1aAA"]
// 也就是match只能匹配大正则的内容

/(d)(?:[a-z])([A-Z](0))2(p)/.exec("1aA0A0p"); // ["1aA0A0p", "1", "A0", "0", "p"]
// 有小括号a套小括号b的时候,会先小括号a,然后再小括号里的小括号b,小括号a里面的完结之后才到下一个分组
原文地址:https://www.cnblogs.com/2han/p/6373421.html