正则表达式

225 阅读2分钟

1. 什么是正则表达式?

英文: regular express 可以理解为有规律的表达式, 正则表达式本质就是我们要在字符串中找到符合我们规则的部分,抽象出来就是规律。

2. 概念

正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。

概念重点:字符串匹配,含有,替换,提取

学好正则先从认识字符开始

其实正则表达式就是在字符串添加一些我们不熟悉,或者需要花时间才能熟悉的字符。

  1. 普通字符
  2. 非打印字符
  3. 特殊字符
  4. 限定符
  5. 定位符
  6. 选择符
  7. 反向引用符
  8. 元字符

字符串匹配优先级

字符串匹配优先级

匹配规则

1. 匹配开始与结束 定位符

// 以 a 开始
var startReg = /^a/;

// 以 a 结束
var endReg = /a$/;

2. 组合匹配

使用()表示一个组合,正确的理解是,这个子匹配项

var testCom = /(abc)(def)(hig)/

3. 匹配次数

在正则中标准叫法: 限定符

匹配次数的写法与集合的书写方式类似,使用 {}来表示

  • {0,} 匹配次数 >= 0, 简单的写法: *

  • {1,} 匹配次数 >= 1, 简单的写法: +

  • {0, 1} 匹配次数 >= 0 && <= 1, 简单的写法: ?

() 和 []

  1. () 表示子正则(子组合)表示式开始和结束的位置
// 使用()和没有使用组的区别
var userCom = /onezoo{1,10}/;
var unUserCom = /one(zoo){1,10}/

  1. [] 中括号表示组合中的一个被匹配到
// 匹配其中之一
var test01 = /[abc012]/
var test01_02 = /a|b|c/
// 配合 - 使用,表示直接
var test02 = /[a-z0-3]/

实例

  1. 邮件匹配
var emalReg = /[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;

  1. 手机号
var telReg = /^1[34578]\d{9}$/;

3.url

var urlReg = /^(?:(?:(?:https?|ftp):)?\/\/)(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,})).?)(?::\d{2,5})?(?:[/?#]\S*)?$/

  1. 日期格式
var dataFormatReg = /Invalid|NaN/

  1. ISO日期格式
var ISODataFormatReg = /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/;

  1. 身份证号码
var idcard = /^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)/

参考

  1. regexper.com

  2. MDN正则表达式

说明

在 《JavaScript》语言精粹里面,全部都是使用这种类似铁路图进行说明,图文结合真的是一种很明确、很清晰讲述和学习的方式!

后续更新,保存