参考链接:https://www.baidufe.com/item/eb10deb92f2c05ca32cf.html
参考链接:http://huruqing.cn/docs/JavaScript/list/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F.html
目录
- 正则表达式是什么,有什么用,什么时候用(应用场景)
- 如何创建正则表达式
- 正则表达式匹配规则
- 正则表达式和字符串
一、 正则表达式是什么?有什么用?
- 也叫规则表达式,符合规则放行,不符合规则的拒绝
- 表单验证
- 在登录或注册或者有表单,需要验证的时候使用
二、创建正则表达式对象
-
字面量方式
var reg = /js/; // 此正则用来匹配一个字符串是否包含'js' var str = 'aaaaaajsaaaaaa'; reg.test(str); // 用来test来验证str是否符合规则
-
new关键字
var reg = new RegExp('js','i'); // i-不区分大小写,g-全局匹配,m-多行匹配 var str = 'aajsaa'; var str2 = 'aaJSaa'; console.log(reg.test(str)); // true console.log(reg.test(str2)); // true
-
字符串全局替换
// 字符串全局替换的方法 str = '我们是程序员,程序员是个奇怪的存在'; var newStr = str.replace(/程序员/g,'程序猿'); console.log(newStr);
(三) 常用匹配规则
(一)、元字符
字母,数字都属于元字符
^ 匹配字符串的开始
$ 匹配字符串的结束
任意字符 .
\w 字母、数字、下划线
\s 任意空白字符
\d 匹配数字,等同于[0-9]
\D 匹配非数字,等同于[^0-9]
-
| 或匹配,如 /x|y/ 正则可匹配x或y两个字符
/^1(3|4|5|6|7|8|9)\d\d\d\d\d\d\d\d\d$/ /13|14/
-
[abc] 表示 包含里面的任意一个 一个[]表示一个字符,a,b,c任意一个都符合要求
/^1[3456789]\d\d\d\d\d\d\d\d\d/
[(二)、反义字符
- [^x] 匹配除“x”之外的所有字符,其中“x”可以为任意字符
- [^xyz] 同上,匹配除“x、y、z”之外的任意字符
(三)、重复匹配
注意:这里的重复是规则的重复,并非某个字符串的重复
-
?重复出现零次或一次
/^(\+86)?1[3456789]\d\d\d\d\d\d\d\d\d$/
-
+ 重复出现一次或多次
/^\d+$/ // 可以是1个数字或者多个数字
-
* 重复出现零次或多次
/^abc\d*$/ // abc后面可以跟0个或多个数字
-
{n} 重复出现n次
/^1[3-9]\d{9}$/ // 后面必须有9个数字
{n,} 至少重复出现n次
{m,n} 重复重现m到n次,其中,m
(四) 分组
每个分组将产生分组号,从第一个括号开始,可以使用\n的形式在正则中使用分组号, 如匹配成对出现的HTML标签,可以写成:
/<(\w+)><\/\1>/
在字符串替换中使用分组
var str = '15013795539';
var newStr = str.replace(/(\d{3}\d{4})(\d{4})/,'*******$2');
console.log(newStr);
(五) 惰性匹配
非惰性匹配: 能匹配多长就匹配多长
惰性匹配: 能少匹配就少匹配
var str = '我们是web前端开发工程师';
var reg = /web.*/
str.match(reg)
(六) 字符串方法和正则
replace,match等字符串方法都可以使用正则
-
将下文所有 '程序员' 替换成 '程序猿'
程序员(英文Programmer)是从事程序开发、程序维护的专业人员。一般将程序员分为程序设计人员和程序编码人员,但两者的界限并不非常清楚,特别是在中国。软件从业人员分为初级程序员、中级程序员、高级程序员(现为软件设计师)、系统分析员,系统架构师,测试工程师六大类。
使用match把网页中的图片筛选出来,match方法会把匹配到的数据放入一个数组 数据所在地方: https://m.sdyxmall.com/v1/#/product/66430440
// 解读以下正则表达式
- 日期 /^[1-2][0-9][0-9][0-9]-[0-1]{0,1}[0-9]-[0-3]{0,1}[0-9]$/
- 手机号码 /^(0|86|17951)?(13[0-9]|15[012356789]|166|17[3678]|18[0-9]|14[57])[0-9]{8}$/
- 身份证 /([1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3})$/
- 邮箱 /\w+([-+.]\w+)@\w+([-.]\w+).\w+([-.]\w+)*/
- 网址 /^https?/(([a-zA-Z0-9_-])+(.)?)(:\d+)?(/((.)?(?)?=?&?a-zA-Z0-9_-?))*$/i