常用正则表达式

191 阅读3分钟

这是我参与8月更文挑战的第7天,活动详情查看:8月更文挑战

什么是正则表达式

正则表达式:用于匹配规律规则的表达式,正则表达式最初是科学家对人类神经系统的工作原理的早期研究,现在 在编程语言中有广泛的应用。正则表通常被用来检索、替换那些符合某个模式(规则)的文本。 正则表达式是对字符 串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这 个“规则字符串”用来表达对字符串的一种过滤逻辑。 正则表达式的作用

  1. 给定的字符串是否符合正则表达式的过滤逻辑(匹配)
  2. 可以通过正则表达式,从字符串中获取我们想要的特定部分(提取)
  3. 强大的字符串替换能力(替换) 正则表达式的特点
  4. 灵活性、逻辑性和功能性非常的强
  5. 可以迅速地用极简单的方式达到字符串的复杂控制
  6. 对于刚接触的人来说,比较晦涩难懂
正则表达式的组成
  • 普通字符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]+)$)/