正则:也叫规则,让计算机能够读懂人类的规则,都是操作字符串,也是系统对象
正则默认行为:正则匹配成功就会结束匹配;
如果想要全部查找,就要加标识g(全局匹配)
| 一个竖杠在正则当中表示或
let re = /a/ ;//正则简写 简写性能比全称性能好 一般会被浏览器认为是注释 所以会在里面填东西
let re2 = new RegExp('a');//正则全称 但是有的情况下只能用全称 当正则需要传参的时候,正则只能用全称
let re3 = new RegExp('\\b'+Class+'\\b'); //当特殊字符想要输出的时候在前面再加一个\
* test
* 字符串判断
* 1).返回值为布尔值
* 2).用法:正则.test(字符串)
* 3).列子是否有不是数字的字符
*
* search
* 字符串搜索
* 1).返回出现的位置
* 2).用法:字符串.search(正则)
* 3).忽略大小写:i - ignore
* 正则默认区分大小写
*match
* 获取匹配的项目
* 1).返回数组
* 2).量词:+ 至少含有一个(一个或多个)
* 3).全局匹配:g - global
* 4).用法:字符串.match(正则)
*
* replace
* 替换所有匹配
* 1).返回替换后的字符串
* 2).字符串.replace(正则,想要替换的)
* 3).敏感词过滤
*
* 4).匹配子项
* 日期格式化
*
通过转义字符 可以区分数据类型 用于正则判断
/*
* 转义字符:
* \s:空格
* \S:费空格
* \d:数字
* \D:非数字
* \w:字符 (字母,数字,下划线)
* \W:非字符
*
*
* */
/*
* search:
*
* 概念:正则去匹配字符串,如果匹配成功,就返回匹配成功的位置,
* 如果匹配失败就返回 -1;
* */
let str = "sdfgwsfg";
let re = /df/;
let re2 = /D/;
let re3 = /D/i;//在末尾斜杠后面添加i>>>>i - ignore 能够忽略大小写
//全称写法
let re4 = new RegExp('D','i');//在里面i作为第二个参数
console.log(str.search(re));//返回的是第一个字符的位置
console.log(str.search(re2));//正则默认区分大小写
console.log(str.search(re3));
console.log(str.search(re4));
//可以添加规则忽略大小写
/*
* match:
*
* 概念:正则去匹配字符串,如果匹配成功,就返回匹配成功的数组,
* 如果匹配失败就返回 null;
*
* */
let str = "32432sdfg1wsfg13213";
let re = /\d+/g;// 在里面//写几个就标识匹配几个
//量词:匹配不确定的位置 写在你想要匹配的类型后面
//+:至少出现一次
console.log(str.match(re));
//正则默认行为:正则匹配成功就会结束匹配 这里就返回一个3
//如果想要全部查找,就要加标识g(全局匹配)
/*
* replace:
*
* 概念:正则去匹配字符串,匹配成功的字符去替换成新的字符串
* replace第二个参数可以使字符串,也可以是回调函数,
* 其中函数的第一个参数就是匹配成功的字符
* 函数第一个参数就是母亲(正则整体) 第二个参数就是第一个子项以此类推
* */
let str = "32432sdfg1wsfg13213";
let re = /fg+/g;
str = str.replace(re,"zz");
console.log(str);
/*
* 字符类:一组相似的元素 []中括号的整体代表一个字符表示可以出现里面的任意一个值
*
* 任意字符:
* [abc]
* 范围:
* [a-z]、[0-9]
*
* 排除(不包括)^写在[]里面表示排除
* [^a]
* */
//[]中填写任意字符
let str = "abc";
let re = /a[dbw]c/;//a 第一位 [bdc]第二位 c第三位 第二位中只需要字符串中第二位满足其中一个就正确
console.log(re.test(str));
//[^]排除不想要的字符
let str2 = "abc";
let re2 = /a[^bdc]c/;//字符串第二位要满足不能有b、d、c这三个字符
console.log(re2.test(str2));//false
//[a-z] [val1-val2]规定想要的范围
let str3 = "asd22r_ASDASDDD12WWsdwdqw";
let re3 = /([a-z]|[0-9])+/gi;
let re4 = /[a-z0-9A-Z]+/g;
str3.replace(re3,(items)=>{
console.log("res3>>>"+items);
});
str3.replace(re4,(items)=>{
console.log(`re4>>>${items}`);
})
/*
* 匹配子项:
* 用小扩号()代表 同时小括号还有分组操作的作用
* 把正则的整体叫做(母亲)
* 然后把左边第一个小括号里面的正则,叫做这个第一个子项(母亲的第一个孩子)
* */
let str = '2018-8-16';
//let re = /-+/g;
//let re = /\d+-/g;//数字可以出现多次
//let re = /\d-+/g;//-可以出现多次
let re= /(\d+)(-)/g;//通过分组数字和-都可以出现多次 但是格式和分组里面一样
str = str.replace(re,(items,item1,item2)=>{//函数第一个参数就是母亲(正则整体) 第二个参数就是第一个子项以此类推
//计算规则,必须在满足母亲的情况下子项再到母亲中去满足
console.log(item1);
// return "/";
return item1+"/"
});
alert(str);
//在match的使用匹配子项
let str2 = "abc";
let re2 = /(a)(b)(c)/;
console.log(str2.match(re2));/*必须在正则不是全局的情况下可以获得子项的集合*/