看懂火星文(一)

image

感謝

本文參考《正則表達式迷你書》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 1
w [0-9a-zA-Z]
W 2
s [tvnrf] 空白, 水平製表, 垂直製表, 換行, 回車, 換頁
S 3
. 通配符

如何匹配任意字符 ?

[dD], [wW], [sS], [^]數組

量詞

量詞簡寫

量詞 含義
{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

貪婪量詞, 惰性量詞

惰性量詞通常是在貪婪量詞後面添加問號code

貪婪量詞 惰性量詞
{m, n} {m, n}?
{m, } {m, }?
? ??
  • | +?
  • | *?

image

多選分支

什麼是多選分支

多選分支能夠支持多個子正則任選其一。注意分支匹配也是惰性的, 當匹配知足第一個後就不會第二個了。ip

// 能夠匹配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的文件路徑

路徑的常見格式以下: rem

F:studyjavascriptregexregular expression.pdf

F:studyjavascriptregex\

F:studyjavascript

分析

  • 首先匹配判符F:, 可使用正則[a-zA-Z]:\
  • 實現排除字符組4, 全部匹配排除字符組的都是非法字符串
  • 文件名不能爲空字符串5+, 因此添加量詞+
  • 文件的路徑能夠很長因此添加量詞, (6+\)
  • 文件的路徑不以""結尾, 因此咱們添加一個匹配路徑結尾的正則 (7+)?

實現

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

  1. 0-9
  2. 0-9a-zA-Z
  3. tvnrf
  4. \:*<>|"?rn/
  5. \:*<>|"?rn/
  6. \:*<>|"?rn/
  7. \:*<>|"?rn/
相關文章
相關標籤/搜索