匹配子项
子项:整体的正则表达式可以看做父亲,第一个小括号就是第一个子项,以此类推……
正则中小括号()的作用——分组
var str = "abc";
var reg = /(a)(b)(c)/;
console.log(str.match(reg));
结果如下:
注意:match方法中,若传入的正则是全局匹配,返回值不会返回子项的匹配结果。
var str = "abc";
var reg = /(a)(b)(c)/g; // 使用全局匹配
console.log(str.match(reg)); // 结果["abc"]
replace中的匹配子项:
var str = "2020-01-02";
var reg = /(\d+)-/g;
str.replace(reg,function (s0,s1,s2) {
/*
* 规定写法:
* 第一个参数输出的内容是正则整体匹配结果
* 从第二个参数起,有多少子项都可以打出来,子项和参数要一一对应
* 子项打印完了之后,后面的参数就是匹配的位置
*/
console.log(s0,s1,s2);
});
结果:
子项(子模式)的作用:
1 当正则比较复杂的时候,可以用()来分组。
2 当需要使用到整体中部分内容的时候,可以用()来分组,并且得到分组中的内容。
正则中中括号[]的作用
1 中括号表示一个整体,括号中的字符属于或者关系,匹配字符串时,只从中挑选一个来做匹配。
var str = "abfg";
var str2 = "abcfg";
var str3 = "abefg";
var reg = /ab[cde]fg/;
console.log(reg.test(str)); //false
console.log(reg.test(str2)); //true
console.log(reg.test(str3)); //true
2 中括号中可以给范围[0-9][a-z][A-Z]
var str4 = "5s";
var reg2 = /[0-9][a-z]/;
console.log(reg2.test(str4)); //true
3 中括号中可以排除一些东西
var str5 = "a";
var reg3 = /[^a-z]/; //^符号表示非(除了)
console.log(reg3.test(str5)); //false
正则中大括号{}的作用
{1,5}——出现1到5次
{2,}——大于2次
{3}——等于3次