这是我参与8月更文挑战的第7天,活动详情查看:8月更文挑战
什么是正则表达式
正则表达式:用于匹配规律规则的表达式,正则表达式最初是科学家对人类神经系统的工作原理的早期研究,现在 在编程语言中有广泛的应用。正则表通常被用来检索、替换那些符合某个模式(规则)的文本。 正则表达式是对字符 串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这 个“规则字符串”用来表达对字符串的一种过滤逻辑。 正则表达式的作用
- 给定的字符串是否符合正则表达式的过滤逻辑(匹配)
- 可以通过正则表达式,从字符串中获取我们想要的特定部分(提取)
- 强大的字符串替换能力(替换) 正则表达式的特点
- 灵活性、逻辑性和功能性非常的强
- 可以迅速地用极简单的方式达到字符串的复杂控制
- 对于刚接触的人来说,比较晦涩难懂
正则表达式的组成
- 普通字符abc 123
- 特殊字符(元字符):正则表达式中有特殊意义的字符\d \w
- 示例演示:
- \d 匹配数字
- ab\d 匹配 ab1、ab2
常用元字符串
元字符说明
-
\d 匹配数字
-
\D 匹配任意非数字的字符
-
\w 匹配字母或数字或下划线
-
\W 匹配任意不是字母,数字,下划线
-
\s 匹配任意的空白符
-
\S 匹配任意不是空白符的字符
-
. 匹配除换行符以外的任意单个字符
-
^ 表示匹配行首的文本(以谁开始)
-
$ 表示匹配行尾的文本(以谁结束)
-
限定符说明
-
- 重复零次或更多次
-
- 重复一次或更多次
-
? 重复零次或一次
-
{n} 重复n次
-
{n,} 重复n次或更多次
-
{n,m} 重复n到m次
其它
- [] 字符串用中括号括起来,表示匹配其中的任一字符,相当于或的意思
- [^] 匹配除中括号以内的内容
- \ 转义符
- | 或者,选择两者中的一个。注意|将左右两边分为两部分,而不管左右两边有多长多乱
- () 从两个直接量中选择一个,分组
- eg:gr(a|e)y匹配gray和grey
- [\u4e00-\u9fa5] 匹配汉字 ***
创建正则对象
var reg = new RegExp('\d', 'i');
var reg = new RegExp('\d', 'gi');
//使用 内置对象 的方式 创建正则表达式
// 第一个参数 规则
//第二个参数 模式 i忽略大小写 g全局匹配 gi全局匹配+忽略大小写
var rg = new RegExp('ab[a-z]','i');
var str = 'aBa';
var flag = rg.test(str);
console.log(flag)
//使用变量 的方式 创建正则表达式
var rg = /ab[a-z]/i;
var str = 'Aba';
var flag = rg.test(str);
console.log(flag)
正则匹配
// 匹配日期
var dateStr = '2015-10-10';
var reg = /^\d{4}-\d{1,2}-\d{1,2}$/
console.log(reg.test(dateStr));
正则提取
// 2. 提取email地址
var str = "123123@xx.com,fangfang@valuedopinions.cn 286669312@qq.com 2、
emailenglish@emailenglish.englishtown.com 286669312@qq.com...";
var array = str.match(/\w+@\w+\.\w+(\.\w+)?/g);
console.log(array);
正则替换
// 1. 替换所有空白
var str = " 123AD asadf asadfasf adf ";
str = str.replace(/\s/g,"xx");
console.log(str);
常用的正则表达式
火车车次:/^[GCDZTSPKXLY1-9]\d{1,4}$/
必须带端口号的网址(或ip):/^((ht|f)tps?:\/\/)?[\w-]+(\.[\w-]+)+:\d{1,5}\/?$/
网址(url,支持端口和"?+参数"和"#+参数):/^(((ht|f)tps?):\/\/)?[\w-]+(\.[\w-]+)+([\w.,@?^=%&:/~+#-]*[\w@?^=%&/~+#-])?$/
统一社会信用代码:/^[0-9A-HJ-NPQRTUWXY]{2}\d{6}[0-9A-HJ-NPQRTUWXY]{10}$/
统一社会信用代码(宽松匹配)(15位/18位/20位数字/字母):/^(([0-9A-Za-z]{15})|([0-9A-Za-z]{18})|([0-9A-Za-z]{20}))$/
银行卡号(10到30位, 覆盖对公/私账户, 参考微信支付):/^[1-9]\d{9,29}$/
中文姓名:/^(?:[\u4e00-\u9fa5·]{2,16})$/
英文姓名:/(^[a-zA-Z][a-zA-Z\s]{0,20}[a-zA-Z]$)/
手机号(mobile phone)中国(严谨), 根据工信部2019年最新公布的手机号段:/^(?:(?:\+|00)86)?1(?:(?:3[\d])|(?:4[5-79])|(?:5[0-35-9])|(?:6[5-7])|(?:7[0-8])|(?:8[\d])|(?:9[189]))\d{8}$/
手机号(mobile phone)中国(宽松), 只要是13,14,15,16,17,18,19开头即可:/^(?:(?:\+|00)86)?1[3-9]\d{9}$/
手机号(mobile phone)中国(最宽松), 只要是1开头即可, 如果你的手机号是用来接收短信, 优先建议选择这一条:/^(?:(?:\+|00)86)?1\d{10}$/
email(邮箱):/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
座机(tel phone)电话(国内),如: 0341-86091234:/^\d{3}-\d{8}$|^\d{4}-\d{7,8}$/
座机(tel phone)电话(国内), 区号可选,如: 0341-86091234:/^(?:\d{3}-)?\d{8}$|^(?:\d{4}-)?\d{7,8}$/
身份证号(1代,15位数字):/^[1-9]\d{7}(?:0\d|10|11|12)(?:0[1-9]|[1-2][\d]|30|31)\d{3}$/
身份证号(2代,18位数字),最后一位是校验位,可能为数字或字符X:/^[1-9]\d{5}(?:18|19|20)\d{2}(?:0[1-9]|10|11|12)(?:0[1-9]|[1-2]\d|30|31)\d{3}[\dXx]$/
身份证号, 支持1/2代(15位/18位数字):/(^\d{8}(0\d|10|11|12)([0-2]\d|30|31)\d{3}$)|(^\d{6}(18|19|20)\d{2}(0[1-9]|10|11|12)([0-2]\d|30|31)\d{3}(\d|X|x)$)/
数字:/^\d{1,}$/
数字和字母组成:/^[A-Za-z0-9]+$/
英文字母:/^[a-zA-Z]+$/
小写英文字母组成:/^[a-z]+$/
大写英文字母:/^[A-Z]+$/
密码强度校验,最少6位,包括至少1个大写字母,1个小写字母,1个数字,1个特殊字符:/^\S*(?=\S{6,})(?=\S*\d)(?=\S*[A-Z])(?=\S*[a-z])(?=\S*[!@#$%^&*? ])\S*$/
邮政编码(中国):/^(0[1-7]|1[0-356]|2[0-7]|3[0-6]|4[0-7]|5[1-7]|6[1-7]|7[0-5]|8[013-6])\d{4}$/
不能包含字母:/^[^A-Za-z]*$/
数字和英文字母组成,并且同时含有数字和英文字母:/^(?=.*[a-zA-Z])(?=.*\d).+$/
限制字母和数字长度:/^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{23,23}$/
数字和小数:/^(([^0][0-9]+|0)\.([0-9]{1,2})$)|^(([^0][0-9]+|0)$)|^(([1-9]+)\.([0-9]{1,2})$)|^(([1-9]+)$)/