1.n$
n$作用是以n单位字符串为结尾,可以明确的是单个字符n,也可以是一个单位字符串,比如(ab\w)$
2.(n)\1(b)\2 正向引用(需要括号)
\1~\n可以作为,n和b的引用,注意,n和b都需要使用()括起来,用带括号的才能被引用,n和n和上一条一样,也是单个字符或者单位字符串
var str = "AABCD";
var regexp = /(\w)\1/g;
var res = str.match(regexp);
console.log(res);//['AA']
3.$1$2 分组反向引用(需要括号)
用()扩起来的为一个组,$1~$n可以作为当前RegExp的匹配分组的各个引用,例子中ABD被引用了,但由于\w没有使用(),所以不算引用
var str = "ABCD";
var regexp = /(A)(B)\w(D)/g;
var res = str.replace(regexp,"$3");
console.log(res);//D
console.log(RegExp.$1);//A
console.log(RegExp.$2);//B
console.log(RegExp.$3);//D
4.[\s\S] ,[\w\W],[\d\D]表示所有字符
5.lastIndex 和 regexp.exec(str);可以逐步查看匹配项
var str = "123Li456LI789";
var regexp = /Li/ig;
console.log(regexp.lastIndex);//0
console.log(regexp.exec(str));//[ 'Li', index: 3, input: '123Li456LI789', groups: undefined ]
console.log(regexp.lastIndex);//5
console.log(regexp.exec(str));//[ 'LI', index: 8, input: '123Li456LI789', groups: undefined ]
console.log(regexp.lastIndex);//10
console.log(regexp.exec(str));//null
6.str.replace的使用
一般使用str.replace(str,str1);只是一次替换,不能全局替换
正则使用str.replace(regexp,str);虽然正则,但是不能调配或者使用正则中的引用
正则加函数使用 str.replace(regexp,($1~$n)=>{return out});
var str = "123Li456lI789";
var regexp = /(l)(i)/ig;
var res = str.replace("Li", "LI");//一般使用
str.match(regexp);
console.log(res);//123LI456lI789
res = str.replace(regexp, "LI");//正则使用,可以替换两个Li
console.log(res);//123LI456LI789
res = str.replace(regexp, function () {
console.log(arguments[0]);//“Li”匹配的字符串
console.log(arguments[1]);//L第一个引用
console.log(arguments[2]);//i第二个引用
console.log(arguments[3]);//3最后一个引用的下一个
var temp = arguments[1].toLowerCase();
return temp + arguments[2];
}
);
console.log(res);//123li456lI789
//正则使用,可以动态任意修改匹配的内容
7.限定某个字符串只能由什么组成,使用/^n$/g
例子:用户名只 能用 中文、英文、数字、下划线、4-16个字符。
var reg = /^[\u4E00-\u9FA5\w]{4,16}$/g;
var res = str.match(reg);
8.可变参数创建regexp时,可以使用new RegExp(param,)的方式;
当创建一个固定reg时,可以使用/n/igm的方式,但是n是参数名时,无法代表参数的值,比如一个参数名为_str,
创建时/_str/g;此时的_str只是字符串?"_str"的意思,可以使用var reg = new RegExp(_str,"g");的方式