正则 详解 包括小案例 可以做复习笔记和查看小文档
密码验证:
var reg = /^(?=\D+\d)(?=.*[A-Z])[a-zA-Z0-9]{8-16}$/
;
正则表达式修饰符
g i m
g // 全局匹配
i // 不区分大小写
m // 多行匹配 \n 产生的换行
reg 返回正则表达式基础
var reg = /a/g
console.log(new reg.constructor());
console.log(reg.compile());
exec(“str”) 在字符串中找到对应正则的内容 index为下标开始的位置 全局匹配无效
var reg = /a/g
console.log(reg.exec("bacead"));
// outPut
// ['a', index: 1, input: 'bacead', groups: undefined]
test(“str”) 是否可以在字符串中找到满足条件的内容 返回true或false
var reg = /a/g
console.log(reg.test("bbcebd")); // outPut flase
console.log(reg.test("bacebd")); // outPut true
console.dir(reg)
outPut=>{
/a/g
dotAll: false
flags: "g"
global: true
hasIndices: false
ignoreCase: false
lastIndex: 0
multiline: false
source: "a"
sticky: false
unicode: false
[[Prototype]]: Object
}
// source 表示 正则内容
// flags 对应正则修饰符
字符串方法 replace() search() match() split()
// search 方法 可以按照条件查找
var str = "1asdfacdf";
var index1 = str.search("a");
var index2 = str.search(/a/g);
console.log(index); // 1 1
// 扩展 a后面有c的索引
var str = "1asdfacsdf";
var index = str.search(/a(?=c)/g);
console.log(index); // 5
// split(str) 截取
console.log("a|b&c|d&e".split("|")); // out ['a', 'b&c', 'd&e']
console.log("a|b&c|d&e".split(/[|&]/)); // ['a', 'b', 'c', 'd', 'e']
console.log("http://www.163.com/news/nsl/index.html?a=1&b=2".split(/(?<=:\/\/.*?)\//));
// replace(str) 方法
// 替换所有的a 变成0
var str = "adfnsfasdafa";
str = str.replace(/a/g, "0");
console.log(str);
// 可以替换多个,可以每次替换时执行后面的函数,函数内返回return结果会替换内容
str = str.replace(/a/g, (item, index)=>{
console.log(item, index);
});
console.log(str);
// match(str) 如果没有全局查找,没有群组, 方法等同于正则的exec
// 返回满足正则全部查找内容
console.log("adfnsfasdafa".match(/a/g)); // (4) ['a', 'a', 'a', 'a']
// 满足返回群组的内容
console.log("4[ac]".match(/(\d)\[([a-z]*)]/));
元字符
- 定义: var reg = /a/; a 就是元字符
一、 通配符
-
“.” 匹配任意一个字符
console.log(“abacad”.match(/a./g));
// outPut (3) [‘ab’, ‘ac’, ‘ad’]
-
“” 转义字符 取消元字符原有的作用 恢复为字符特征
console.log(“aba.c.a.dac”.match(/a./g));
// outPut (2) [‘a.’, ‘a.’] -
“[]” 内可以满足一个字符串的替代 [内的 “.” 不在具有通配符的作用]
console.log(“abacad”.match(/a[bd]/g));
// outPut (2) [‘ab’, ‘ad’] -
[] 内的 - 表示多少到多少
console.log(“a1a2a3a4a5a6”.match(/a[0-9]/g));
console.log(“a1a2a3a4a5a6”.match(/a[a-zA-Z]/g));
// 不要数字 ^ 在中括号中 只能写在第一位, 若是卸载非第一位 则是字符^
console.log(“a1a2a3a4a5agavaca6”.match(/a[^0-9]/g));
// OutPut (3)[‘ag’, ‘av’, ‘ac’] -
\w => [a-zA-Z0-9_] 任意一个字符
-
\W => [^a-zA-Z0-9_] 除了数字字母下划线以外的其他字符
-
\d => [0-9] 任意数字
-
\D => [^0-9] 任意非数字
-
\s => 空白字符
-
\S => 非空白字符
练习 匹配YYYY-MM-DD
\d\d\d\d-\d\d-\d\d ???
重复 {n};
console.log("aaaaabbb".match(/a{4}/g)); // 匹配4个次
console.log("aaaaabbb".match(/a{2}/g)); // 匹配4个次
console.log("aaaaabbb".match(/a{1}/g)); // 匹配4个次
console.log("aaaaabbb".match(/a{0}/g)); // 匹配4个次
console.log("acacacacacbbb".match(/ac{4}/g)); // 匹配4个次
console.log("acacacacacbbb".match(/(ac){4}/g)); // 匹配4个次
OUT{
['aa', 'aa']
2.重复.js:1 ['aaaa']
2.重复.js:2 (2) ['aa', 'aa']
2.重复.js:3 (5) ['a', 'a', 'a', 'a', 'a']
2.重复.js:4 (9) ['', '', '', '', '', '', '', '', '']
2.重复.js:5 null
2.重复.js:6 ['acacacac']
}
贪婪匹配 {最小重复次数, 最大重复次数} “?”表示 {} “*” 表示{0,} “+” {1,}
console.log("aaaaaasdasaaaaaaaaaaaa".match(/a{2,5}/g)); // (4) ['aaaaa', 'aaaaa', 'aaaaa', 'aa'] 优先匹配最大的
console.log("aaaaaasdasaaaabbaaaaaaaa".match(/a{2,5}b{2,5}/g)); // ['aaaabb'] 优先匹配最大的
console.log("aaaaaasdabsaabbaaaabbaaaaaa".match(/a{2,5}b{2,5}/g)); // ['aabb', 'aaaabb']优先匹配最大的
console.log("aaaaaasdasaabbbaababbbbaaaaaabbbbba".match(/a{2,5}b{2,5}/g)); // ['aabbb', 'aaaaabbbbb'] 优先匹配最大的
console.log("afdsczvqadfafafafaaa".match(/a{1,}/g))// 表示匹配无穷个a
\D+\d 表示 非数字起头,但是后续字符串中至少由一位数字
.*[A-Z] .是通配符 *{0,} [a-z] 在整个字符串中必须有一个小写字母
.*[A-Z] 表示真个字符串中必须包含一个大写字母