1. test()和exec() 2.分组和前瞻 3.字符串正则相关
test和exec方法
var re = /abc/g;
var re2 = new RegExp("abc", "g");
/**
* re.test(字符串) : 返回 true/false
re.exec(字符串)) : 返回数组对象(多次调用,直接返回null)
*/
let bool = re.test("abc");
console.log(bool);
let res = re2.exec("aaa-abc-abc-abb-abc-cc");
console.log(res);
//res[0]匹配的子字符串
//index匹配的第一个字符串的位置
//input要匹配的字符串本身
//re加了g后执行一次返回一个结果,下次执行会继续从上次位置开始找
//i表示忽略大小写
//不加的话一直返回第一个匹配结果
console.log(res[0], res.index, res.input);
//类似如下方法
// let arr = [1, 3, 5];
// arr.index = 3;
// arr.input = "aa-bb-cc";
// console.log(arr);
正则公式
//$保证匹配的字符串在末尾
//^保证匹配的字符串在开头
//如果两个符号都加,只有abc能满足 abcabc不行
var re = /^abc$/gi;
var str = "acabc";
console.log(re.test(str));
var re2 = /[xyz]bc/; //xbc ybc zbc
var re3 = /[^xyz]bc/; //取反 除了x y z开头的都匹配
var re4 = /[1-7b-f]xy/; //5xy cxy
// . 代表任何字符 除了换行
var re5 = /.xy/; // " xy" "11xy"
// \d 0-9数字 \D 除了0-9 \s 空白字符 |S 除了空白字符
// \w 0-9a-zA-Z \W 除了0-9a-zA-Z
var re6 = /\sa\s/;
console.log(re6.test(" a "));
//量词
// {n} n个
// {n,} 至少n个
// {n, m} n至m个
// + 1个到多个
// * 0个到多个
// ? 0个或1个
var re7 = /[abc]{3}/; //acc
console.log(re7.test("aaa"));
var re8 = /^[abc]{3,}/;
console.log(re8.test("aabc"));
//贪图型,最长字符串匹配
var re9 = /x[abcy]*y/;
//非贪图型 只要匹配立刻返回
// var re9 = /x[abcy]*?y/;
var res = re9.exec("xabcyyy");
console.log(res);
分组和前瞻性
//分组
var re = /([abc]{3}\sxy){2,4}/;
console.log(re.test("aaa xybbb xy abc xy"));
//exec方法可以按组显示匹配的字符串
var re = /(A(B(C)))/;
var res = re.exec("ABC");
console.log(res);
var re = /\s([1-9]\d{4,11})@(qq|163)\.com\s/g;
var str = `
12311241@qq.com eaflhlaehflkahfe
213123@163.com asdajd asdadad
08392839@qq.com aeoaoefya 232eaf
dsfsd
`;
var res;
do {
res = re.exec(str);
console.log(res && res[0] + res[1] + "-" + res[2]);
} while (res);
//前瞻 x仅仅用来判断是否满足 返回结果时只返回abc
var re = /(abc(?=x))/;
//前瞻性取反
// var re = /(abc(?!x))/;
console.log(re.exec("abcx"));
字符串中与正则相关操作
var s = 'guoyunhao';
s1 = s.substr(0, 3);
console.log(s1);
s2 = s.substring(0, 6);
console.log(s2);
//和正则表达式相关
s.search();
s.split();
s.replace();
s.match();
var str = ".aasd:asdda.asdf: asdas.aaaaaa:";
var re = /\.[a-z]+:/g;
let res = str.match(re);
console.log(res);
let resStr = str.replace(re, function(res, group1, index, str) {
console.log(res, group1, index);
return group1;
});
console.log(resStr);