摘要:主要有兩種操作匹配和捕獲鏈接描述正則表達(dá)式語法正則表達(dá)式的創(chuàng)建正則表達(dá)式是有元字符和修飾符組成,將元字符和修飾符寫在中。
正則表達(dá)式
正則表達(dá)式是對(duì)字符串操作的一種邏輯公式,就是用事先定義好的一些特定字符、及這些特定字符的組合,組成一個(gè)“規(guī)則字符串”,這個(gè)“規(guī)則字符串”用來表達(dá)對(duì)字符串的一種過濾邏輯,許多程序設(shè)計(jì)語言都支持利用正則表達(dá)式進(jìn)行字符串操作。主要有兩種操作:匹配和捕獲 鏈接描述正則表達(dá)式語法
正則表達(dá)式的創(chuàng)建
正則表達(dá)式是有元字符和修飾符組成,將元字符和修飾符寫在" // "中。
eg: var reg = /d+/g;//意思是在全局中的多個(gè)數(shù)字
元字符:
: 轉(zhuǎn)義字符
^: 以某一個(gè)元字符開始
$: 以某一個(gè)元字符結(jié)束
: 匹配一個(gè)換行
".":除了 以外的任意字符
(): 分組
x|y: x或者y中第一個(gè)
[xyz]:x或者y或者z中的一個(gè)
[^xyz]:除了三個(gè)以外的任意一個(gè)字符
[a-z]:a 和 z 之間的任意字符
[^a-z]:除了a 和 z 之間的任意字符
d:表示 0-9 之間的數(shù)字
D:除了0-9之間的數(shù)字以外的任意字符
:匹配一個(gè)邊界符 w1 w2
w:數(shù)字、字母、下劃線中的任意字符 [0-9a-zA-Z_]
s:匹配一個(gè)空白字符 空格、一個(gè)制表符、換頁符...
量詞元字符(數(shù)量元字符)
* :出現(xiàn)零到多次
+:出現(xiàn)一到多次
?:出現(xiàn)零次或者一次
{n}:出現(xiàn) n 次
{n,}:出現(xiàn) n 到多次
{n,m}:出現(xiàn) n 到 m 次
標(biāo)志字符
g:全局搜索,記憶方式 global
i:不區(qū)分大小寫,記憶方式 ignore
m:多行搜索
使用方式正則對(duì)象的方法
1.test() 方法用于檢測(cè)一個(gè)字符串是否匹配某個(gè)模式,若匹配,返回true,否則返回false
eg:手機(jī)號(hào)驗(yàn)證
2.exec()方法用于檢索字符串中的正則表達(dá)式的匹配,若匹配,返回匹配值,否則返回false
匹配時(shí),返回值跟 match 方法沒有 g 標(biāo)識(shí)時(shí)是一樣的。數(shù)組第 0 個(gè)表示與正則相匹配的文本,后面 n 個(gè)是對(duì)應(yīng)的 n 個(gè)捕獲的文本,最后兩個(gè)是對(duì)象 index 和 input同時(shí)它會(huì)在正則實(shí)例的 lastIndex 屬性指定的字符處開始檢索字符串 string。當(dāng) exec() 找到了與表達(dá)式相匹配的文本時(shí),在匹配后,它將把正則實(shí)例的 lastIndex 屬性設(shè)置為匹配文本的最后一個(gè)字符的下一個(gè)位置。有沒有 g 標(biāo)識(shí)對(duì)單詞執(zhí)行 exec 方法是沒有影響的,只是有 g 標(biāo)識(shí)的時(shí)候可以反復(fù)調(diào)用 exec() 方法來遍歷字符串中的所有匹配文本。當(dāng) exec() 再也找不到匹配的文本時(shí),它將返回 null,并把 lastIndex 屬性重置為 0
var string = "2018.07.23"; var regex2 = /(d+)/g; console.log( regex2.exec(string) ); console.log( regex2.lastIndex); console.log( regex2.exec(string) ); console.log( regex2.lastIndex); console.log( regex2.exec(string) ); console.log( regex2.lastIndex); console.log( regex2.exec(string) ); console.log( regex2.lastIndex);
其中正則實(shí)例lastIndex屬性,表示下一次匹配開始的位置.比如第一次匹配了“2017”,開始下標(biāo)是0,共4個(gè)字符,因此這次匹配結(jié)束的位置是3,下一次開始匹配的位置是4。
從上述代碼看出,在使用exec時(shí),經(jīng)常需要配合使用while循環(huán):
var string = "2018.07.23"; var regex2 = /(d+)/g; var result; while ( result = regex2.exec(string) ) { console.log( result, regex2.lastIndex ); }正則的匹配
字符匹配
精確匹配就不說了,比如/hello/,也只能匹配字符串中的"hello"這個(gè)子串。
正則表達(dá)式之所以強(qiáng)大,是因?yàn)槠淠軐?shí)現(xiàn)模糊匹配。
匹配多種數(shù)量
var str = "cde cdde cffffde cffffdde cffffddde"; var reg = /cd{3,5}e/g; console.log(str.match(reg));
貪婪性和懶惰性
貪婪:eg:
var str = "123"; var reg = /d+/g; console.log(reg.exec(str));
懶惰("http://"正則表達(dá)式末尾加上"?")eg:
var str = "123"; var reg = /d+?/g; console.log(reg.exec(str));
匹配多種情況
用字符組[]來匹配多種情況,其他幾種形式(dDsSwW)都可以等價(jià)成這種。eg:
替換
eg:
讀正則
不僅自己會(huì)寫正則,還要讀懂其他人寫得正則
操作符的優(yōu)先級(jí)是從上到下,由高到低的,所以在分析正則的時(shí)候可以根據(jù)優(yōu)先級(jí)來拆分正則,比如 /ab?(c|de*)+|fg/
因?yàn)槔ㄌ?hào)是一個(gè)整體,所以/ab?()+|fg/,括號(hào)里面具體是什么可以放到后面再分析
根據(jù)量詞和管道符的優(yōu)先級(jí),所以a, b?, ()+和管道符后面的f, g
同理分析括號(hào)里面的c|de => c和d, e
綜上,這個(gè)正則描述的是
上面是我今天學(xué)習(xí)的內(nèi)容,在這里分享給大家,有什么不對(duì)的可以留言給我,爭(zhēng)取做到最好,希望大家有什么好的建議,好的文章也可以分享給我,我們共同努力!希望大家多多分享,下面是我的微信號(hào)碼,有對(duì)前端感興趣的朋友我們可以交流一下:
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/113525.html
摘要:注意本文將正則與中的正則分開討論。正則零寬斷言更多參考各種語言對(duì)于正則不同支持參考單行模式與多行模式通過設(shè)置正則表達(dá)式后的修飾符可開啟對(duì)應(yīng)的匹配模式單行模式和多行模式。 最近這段時(shí)間幫同學(xué)處理一些文檔, 涉及到一些結(jié)構(gòu)化文檔的工作大部分都得使用正則表達(dá)式, 之前對(duì)于正則的認(rèn)識(shí)大多來源于語言書上那幾頁的介紹, 自己也沒有用過幾次。這里將我之前感到模糊的概念作個(gè)整理。因?yàn)閷?duì)JS了解多點(diǎn),所...
摘要:本文內(nèi)容共正則表達(dá)式火拼系列正則表達(dá)式回溯法原理學(xué)習(xí)正則表達(dá)式,是需要懂點(diǎn)兒匹配原理的。正則表達(dá)式迷你書問世了讓幫你生成和解析參數(shù)字符串最全正則表達(dá)式總結(jié)驗(yàn)證號(hào)手機(jī)號(hào)中文郵編身份證地址等是正則表達(dá)式的縮寫,作用是對(duì)字符串執(zhí)行模式匹配。 JS 的正則表達(dá)式 正則表達(dá)式 一種幾乎可以在所有的程序設(shè)計(jì)語言里和所有的計(jì)算機(jī)平臺(tái)上使用的文字處理工具。它可以用來查找特定的信息(搜索),也可以用來查...
摘要:控制權(quán)和傳動(dòng)這兩個(gè)詞可能在搜一些博文或者資料的時(shí)候會(huì)遇到,這里做一個(gè)解釋先控制權(quán)是指哪一個(gè)正則子表達(dá)式可能為一個(gè)普通字符元字符或元字符序列組成在匹配字符串,那么控制權(quán)就在哪。 溫馨提示:文章很長很長,保持耐心,必要時(shí)可以跳著看,當(dāng)然用來查也是不錯(cuò)的。 正則啊,就像一座燈塔,當(dāng)你在字符串的海洋不知所措的時(shí)候,總能給你一點(diǎn)思路;正則啊,就像一臺(tái)驗(yàn)鈔機(jī),在你不知道用戶提交的鈔票真假的時(shí)候,...
摘要:最全正則表達(dá)式總結(jié)驗(yàn)證號(hào)手機(jī)號(hào)中文郵編身份證地址等是正則表達(dá)式的縮寫,作用是對(duì)字符串執(zhí)行模式匹配。學(xué)習(xí)目標(biāo)了解正則表達(dá)式語法在中使用正則表達(dá)式在中使 JS高級(jí)技巧 本篇是看的《JS高級(jí)程序設(shè)計(jì)》第23章《高級(jí)技巧》做的讀書分享。本篇按照書里的思路根據(jù)自己的理解和經(jīng)驗(yàn),進(jìn)行擴(kuò)展延伸,同時(shí)指出書里的一些問題。將會(huì)討論安全的類型檢測(cè)、惰性載入函數(shù)、凍結(jié)對(duì)象、定時(shí)器等話題。1. 安全的類型檢測(cè)...
摘要:寫在前面正在看的源碼看到了部分感覺以前看的正則表達(dá)式基礎(chǔ)知識(shí)已經(jīng)完全不夠用了現(xiàn)翻閱博客資料將一些中正則表達(dá)式難用的部分總結(jié)歸納方便自己和友翻閱正則分組重復(fù)匹配對(duì)于重復(fù)的匹配我們經(jīng)常使用到正則表達(dá)式的分組功能我們使用正則匹配地址來實(shí)踐一下假 [TOC] 寫在前面 - Lionad 正在看VueJS的源碼, 看到了HtmlParser部分, 感覺以前看的正則表達(dá)式基礎(chǔ)知識(shí)已經(jīng)完全不夠用了,...
摘要:構(gòu)造函數(shù)可以有兩個(gè)字符串參數(shù),第一個(gè)參數(shù)包含正則表達(dá)式的主體部分。只讀的布爾值,說明這個(gè)正則表達(dá)式是否帶有修飾符。中正則的擴(kuò)展構(gòu)造函數(shù)在中,只能接受字符串作為參數(shù),允許其直接接受正則表達(dá)式作為參數(shù)。 上文傳送門:初探正則表達(dá)式 正則表達(dá)式是一個(gè)描述字符模式的對(duì)象,JavaScript 的 RegExp 類表示正則表達(dá)式,String 和 RegExp 都定義了方法,后者使用正則表達(dá)式進(jìn)...
閱讀 1692·2021-11-23 09:51
閱讀 3209·2021-09-26 10:21
閱讀 807·2021-09-09 09:32
閱讀 889·2019-08-29 16:06
閱讀 3318·2019-08-26 13:36
閱讀 781·2019-08-26 10:56
閱讀 2573·2019-08-26 10:44
閱讀 1152·2019-08-23 14:04