看懂火星文(一)

感谢

本文参考《正则表达式迷你书》javascript

image

模糊匹配

横向模糊匹配

什么是横向模糊匹配?

正则可匹配的字符串的长度不是固定的。例如**/ab{2, 5}c/**, 含义一个a接下来2到5个b接下来是c。java

image

纵向模糊匹配

什么是纵向模糊匹配?

正则匹配到字符串到某一个的字符时,能够不是某个肯定的字符,能够有多种可能。例如**/a[123]b/**, 匹配的字符串能够是a1b, a2b, a3b正则表达式

image

字符串组

虽叫字符组, 可是正则只是匹配字符组中的一个字符express

范围表示法

[123456abcGHIJ]

// 能够写成
[1-6a-cG-J]
复制代码

排除字符组

// 就是字符串中某一位不能为abc
[^abc]
复制代码

常见的简写形式

简写 原始
\d [0-9]
\D [^0-9]
\w [0-9a-zA-Z]
\W [^0-9a-zA-Z]
\s [\t\v\n\r\f] 空白, 水平制表, 垂直制表, 换行, 回车, 换页
\S [^\t\v\n\r\f]
. 通配符

如何匹配任意字符 ?

[\d\D], [\w\W], [\s\S], [^]数组

量词

量词简写

量词 含义
{m, } 至少出现m次
{m} 出现m次
? {0, 1}
+ {1, }
* {0, }

image

贪婪匹配和惰性匹配

什么是贪婪匹配

是尽量多的匹配app

// reg会尽量多的匹配, 例如: 12345, 我会匹配12345而不匹配12
var reg = /\d{2, 5}/g;
复制代码

什么是惰性匹配

是尽量少的匹配spa

// reg会尽量少的匹配, 例如: 12345, 我会匹配 12, 34
// 只要知足2个, 就不会往下匹配了
var reg = /\d{2, 5}?/g
复制代码

贪婪量词, 惰性量词

惰性量词通常是在贪婪量词后面添加问号3d

贪婪量词 惰性量词
{m, n} {m, n}?
{m, } {m, }?
? ??
+ +?
* *?

image

多选分支

什么是多选分支

多选分支能够支持多个子正则任选其一。注意分支匹配也是惰性的, 当匹配知足第一个后就不会第二个了。code

// 能够匹配good或者nice
var reg = /good|nice/
复制代码

image

案例

匹配16禁止颜色值

分析

  • 以“#”开头, #字后面可能出现[0-9a-fA-F]的字符, 3次或者6次

实现

var reg = /^#{1}[0-9a-fA-F]{3}$|^#{1}[0-9a-fA-F]{6}$/g
复制代码

image

匹配时间

分析

  • 当时间的第一位以0或者1开头的时候, 第二位能够是0到9数字
  • 当时间的第一位以2开头的时候, 第二位只能是0-3的数字

实现

// 匹配补0的时间格式(MM:SS)
var reg1 = /^([01][0-9]|[2][0-3]):[0-5][0-9]$/g

// 匹配不须要补0的时间格式(M:S|MM:SS), 个位数开始0能够不写
var reg2 = /^(0?[0-9]|[1][0-9]|[2][0-3]):(0?[0-9]|[1-5][0-9])$/g
复制代码

image

📅 匹配日期

分析

  • 匹配年份的时候, 年份由0到9的数字组成的4位数组成
  • 匹配月份的时候, 月份以0做为第一位数字的时候第二位能够是1到9的任意数字, 月份以1做为第一位数字的时候第二位能够是1到2的任意数字
  • 匹配日期的时候, 日期最大31天

实现

var reg = /^([0-9]{4})-(0[1-9]|1[1-2])-(0[1-9]|[12][0-9]|3[01])$/g
复制代码

image

📃 匹配window的文件路径

路径的常见格式以下:regexp

F:\study\javascript\regex\regular expression.pdf

F:\study\javascript\regex\

F:\study\javascript

分析

  • 首先匹配判符F:, 可使用正则[a-zA-Z]:\
  • 实现排除字符组[^\:*<>|"?\r\n/], 全部匹配排除字符组的都是非法字符串
  • 文件名不能为空字符串[^\:*<>|"?\r\n/]+, 因此添加量词+
  • 文件的路径能够很长因此添加量词*, ([^\:<>|"?\r\n/]+\)
  • 文件的路径不以""结尾, 因此咱们添加一个匹配路径结尾的正则 ([^\:*<>|"?\r\n/]+)?

实现

var reg = /^[a-zA-Z]:\\([^\\:*<>|"?\r\n/]+\\)*([^\\:*<>|"?\r\n/]+)?$/g
复制代码

image

💻 匹配HTML中id属性

分析

<div id="app" class="app"></div>

var reg = /id=".*"/
复制代码

若是使用此正则, 因为是贪婪的, 而且.是通配符包含了", 因此会匹配到最后一个"以前的所用内容(包括其余的")。咱们可使用惰性匹配模式(在量词后面添加问号)

实现

// .*后遇到第一个"就会中止匹配
var reg1 = /id=".*?"/g
复制代码
相关文章
相关标签/搜索