迭代方法
迭代: every some filter map forEach
every
every: 对数组的每一个项做一些判断, 根据函数的返回值, 如果每个项执行函数的返回值都是true, 返回true. 如果有一个是false 返回false
全真为真 一假为假
语法: 数组.every(函数);
函数有3个形参: 项 下标 原数组
var arr = ['a', 'b', 'c', 'd']; var res = arr.every(function (v, i, a) { console.log(i, v, a); // return true; return 0; }); console.log(res);
some
some: 对数组的每一个项做一些判断, 根据函数的返回值, 如果每个项执行函数的返回值都是false, 返回false. 如果有一个是true 返回true
全假为假 一真为真
语法: 数组.some(函数);
函数有3个形参: 项 下标 原数组
var res1 = arr.some(function (v, i, a) { console.log(i, v, a); // return true; return undefined; }); console.log(res1);
filter
filter: 对数组中的做一些过滤, 会将符合条件的(函数的返回值是true)项组成一个新数组返回;
语法: 数组.filter(函数);
函数有3个形参: 项 下标 原数组
常使用: 数据筛选过滤
var arr = ['a', 'b', 'c', 'd']; var res2 = arr.filter(function (v, i, a) { console.log(i, v, a); return i > 1; }); console.log(res2);
map
map\forEach: for循环
map: for循环 将每个函数的返回值组成新数组返回 造成内存浪费
forEach: 纯粹的for循环 没有返回值
数组.map/forEach(函数);
var res3 = arr.map(function (v, i, a) { // console.log(i, v, a); return v + '1'; }); console.log(res3);
forEach
map\forEach: for循环
map: for循环 将每个函数的返回值组成新数组返回 造成内存浪费
forEach: 纯粹的for循环 没有返回值
数组.map/forEach(函数);
var res4 = arr.forEach(function (v, i, a) { console.log(i, v, a); return v + '1'; }); console.log(res4);
正则
正则: 用规定好的具有特定含义的字符组成的规则字符串, 用来实现字符串的检索和替换.
创建正则
new关键字创建:
语法: var 变量 = new RegExp(规则字符串, 修饰符);
var reg = new RegExp('web', 'ig'); console.log(reg); // /web/gi console.log(typeof reg); // object
字面量声明
语法: var 变量 = /规则字符串/修饰符;
var reg1 = /web/ig; console.log(reg1); // /web/gi
修饰符
没有顺序
i: ignore case 忽略大小写
g: global 全局
检索方法
replace
字符串.replace(要替换的字符/正则, 新字符/函数);
函数的返回值就是替换的新字符
函数有一个形参: 每次匹配到的结果
var str = 'web01web02web03Web04WEB05'; console.log(str); // web-->*** var reg = /web/gi; console.log(str.replace(reg, '***')); console.log(str.replace(reg, function (a) { console.log(a); return 'aaa'; }));
split
字符串.split(分割符/正则);
var str = 'web0web1web2web0web1'; console.log(str.split('0')); var reg = /\d/; // 数字\d console.log(str.split(reg));
search
search: 替换indexOf 使用正则做查找 返回找到的符合正则的第一个位置上的下标
惰性查找
var str = 'web0web1web2web0web1'; var reg = /\d/; console.log(str.search(reg));
match
字符串.match(正则);
返回一个数组
单个匹配结果: ['web', index: 0, input: 'web0web1web2web0web1', groups: undefined]
多个匹配结果: ['0', '1', '2', '0', '1']
var str = 'web0web1web2web0web1'; var reg = /\d/; var reg = /\d/ig; console.log(str.match(reg));
exec
exec: 正则.exec(字符串);
返回值与match的单个返回结果一致
如果有返回数组 如果没有 返回null
惰性查找, 一次只找一个, 如果加了g 会从上一次找到的位置开始找 不加g 每次都从下标0开始找
正则.lastIndex: 返回下一次正则匹配开始的位置
var str = 'webstrweb0123'; var reg = /web/; console.log(reg.exec(str)); var reg = /web/g; console.log(reg.lastIndex); // 0 console.log(reg.exec(str)); console.log(reg.lastIndex); // 3 console.log(reg.exec(str)); console.log(reg.lastIndex); // 9 console.log(reg.exec(str)); // null console.log(reg.lastIndex); // 0 console.log(reg.exec(str));
test
test: 正则.test(字符串);
判断字符串是否有符合正则的字符 如果有 返回true 如果没有 返回false
惰性查找, 一次只找一个, 如果加了g 会从上一次找到的位置开始找 不加g 每次都从下标0开始找
var reg = /web/; var str = 'web0web1web2'; console.log(reg.lastIndex); // 0 console.log(reg.test(str)); console.log(reg.lastIndex); // 0 console.log(reg.test(str)); var reg = /web/g; console.log(reg.lastIndex); // 0 console.log(reg.test(str)); console.log(reg.lastIndex); // 3 console.log(reg.test(str)); console.log(reg.lastIndex); // 7 console.log(reg.test(str)); console.log(reg.lastIndex); // 11 console.log(reg.test(str)); // false console.log(reg.lastIndex); // 0 console.log(reg.test(str));
元字符
一个元字符可以表示一类字符
一个元字符做匹配只能匹配一个字符
.
// 1. . 点: 除换行以外的任意字符 var str = '\n这是一个换行句子\n'; console.log(str); var reg = /./; console.log(reg.exec(str));
[] [^]
// 3. []: 字符集 匹配[]里的任意一个字符 [^]: 非字符集 不匹配[^]中的任意一个字符 var str = 'abc123'; var reg = /[1234567890]/; var reg1 = /[^1234567890]/; console.log(reg.exec(str), reg1.exec(str)); // 1 a // 0-9表示:0123456789 // a-z表示: 小写a到小写z之间的所有的字母 // A-Z表示: 大写a到大写Z之间的所有的字母 var reg = /[0-9a-zA-Z]/; var str = '.!@##$$a1'; console.log(reg.exec(str));
\d \D
// 2. \d:匹配数字 \D:匹配非数字 var str = 'str123'; var reg = /\d/; var reg1 = /\D/; console.log(reg.exec(str), reg1.exec(str));
\w \W
// 4. \w: 匹配数字、字母、_中的任意一个 \W: 不匹配数字、字母、_中的任意一个 var str = '!@##$_123qwe'; var reg = /\w/; var reg1 = /\W/; console.log(reg.exec(str), reg1.exec(str)); // _ !
\s \S
// 5. \s: 匹配空格 \S: 不匹配空格 var str = 'you are a beautiful girl'; var reg = /\s/; var reg1 = /\S/; console.log(reg.exec(str), reg1.exec(str)); // 空格 y
\b \B
// 6. \b: 匹配单词边界 \B: 匹配非单词边界 // 一个字母有2个边界 var str = 'you are a beautiful girl'; var reg = /\ba\b/; var reg1 = /\ba\B/; var reg2 = /\Ba\B/; console.log(reg.exec(str), reg1.exec(str), reg2.exec(str)); // a are beautiful
^ $
// 7. ^a: 开头 以a为开头的a a$: 以a为结尾的a // 一起用: 有具体的长度 6-18位 规律性: 银行卡密码 手机号 身份证号 var str = 'we are web0712'; var reg = /^w/; var reg1 = /\d$/; console.log(reg.exec(str), reg1.exec(str)); // 银行卡密码正则: // 6位 var reg = /^\d\d\d\d\d\d$/; var str = '123456'; console.log(reg.test(str));
量词
?
a? : 匹配0个或者1个a 只匹配字符串的第一项
var str = 'str123'; var reg = /\d?/; var reg = /[a-z]?/; console.log(reg.exec(str));
*
a* : 匹配0个或者 连续 多个a 尽可能多的做匹配 只匹配字符串的第一项
var str = 'wertyuiodfghjk23456789sdfghj44567'; var reg = /\d*/; var reg = /[a-z]*/; console.log(reg.exec(str));
+
a+ : 匹配连续多个a 至少匹配1个 尽可能多的做匹配
var str = 'wertyuiodfghjk23456789sdfghj44567'; var reg = /\d+/; var reg = /[a-z]+/; console.log(reg.exec(str));
{m,n}
a{m,n} : 匹配至少m次最多n次的a 尽可能多的做匹配
a{m,} : 匹配至少m次
a{n} : 只匹配n次
,后面绝对不能加空格
var str = 'wtyuiosghjkxcvbnmsdxcvb'; var reg = /[a-z]{5,10}/; console.log(reg.exec(str)); // wtyuiosghj var reg = /[a-z]{1,}/; console.log(reg.exec(str)); // wtyuiosghjkxcvbnmsdxcvb var reg = /[a-z]{10}/; console.log(reg.exec(str)); // wtyuiosghj
或和分组
|
|: 或 匹配|左边或者右边
var reg = /web1|web2/; var str = 'web0712web1web2'; console.log(reg.exec(str)); // web1
()
(): 和 提高匹配的层级
()匹配到的结果可以通过其他属性得到 $1$2:获取第几个()匹配到的结果 RegExp.$1
var reg = /web(1|2)/; var str = 'web2web0712web1'; console.log(reg.exec(str)); // web2 ['web2', '2', index: 0, input: 'web2web0712web1', groups: undefined] console.log(RegExp.$1); // 手机号的加密: 13322221111 133****1111 // 写正则分成3 var reg = /^(1[3-9]\d)(\d{4})(\d{4})$/; var str = '13322221111'; console.log(reg.exec(str)); // 替换 $1 $3 第一个小括号和第三个小括号匹配到的结果 console.log(str.replace(reg, '$1****$3'));
特殊
(?:) : 非获取匹配
var str = 'web1web2'; var reg = /web(?:1|2)/; console.log(reg.exec(str));
(?=)
a(?=b) : 匹配后面必须跟b的a
var str = 'webabcweb123'; var reg = /web(?=\d)/; // 匹配web后面是数字的web console.log(reg.exec(str));
(?!)
a(?!b) : 匹配 后面 不是 b 的 a
使用: 排除条件
var str = 'webabcweb123'; var reg = /web(?!\d)/; // 匹配web后面不是数字的web console.log(reg.exec(str)); // ['web', index: 0, input: 'webabcweb123', groups: undefined]