摘要:首先推薦幾個(gè)正則表達(dá)式編輯器正則表達(dá)式是一種查找以及字符串替換操作。此表所列的常用正則表達(dá)式,除個(gè)別外均未在前后加上任何限定,請(qǐng)根據(jù)需要,自行處理。例如對(duì)而言,則采用一對(duì)引號(hào)來(lái)確定正則表達(dá)式的邊界。
這篇文章本來(lái)很早就要寫(xiě)的,拖了挺久的,現(xiàn)在整理下,供大家學(xué)習(xí)交流哈!
基本概念正則表達(dá)式是一種文本模式,包括普通字符(例如,a 到 z 之間的字母)和特殊字符(稱(chēng)為“元字符”)。模式描述在搜索文本時(shí)要匹配的一個(gè)或多個(gè)字符串。
首先推薦幾個(gè)正則表達(dá)式編輯器
Debuggex :https://www.debuggex.com/
PyRegex:http://www.pyregex.com/
Regexper:http://www.regexper.com/
正則表達(dá)式是一種查找以及字符串替換操作。正則表達(dá)式在文本編輯器中廣泛使用,比如正則表達(dá)式被用于:
檢查文本中是否含有指定的特征詞 找出文中匹配特征詞的位置 從文本中提取信息,比如:字符串的子串 修改文本
說(shuō)明:正則表達(dá)式通常用于兩種任務(wù):1.驗(yàn)證,2.搜索/替換。用于驗(yàn)證時(shí),通常需要在前后分別加上^和$,以匹配整個(gè)待驗(yàn)證字符串;搜索/替換時(shí)是否加上此限定則根據(jù)搜索的要求而定,此外,也有可能要在前后加上而不是^和$。此表所列的常用正則表達(dá)式,除個(gè)別外均未在前后加上任何限定,請(qǐng)根據(jù)需要,自行處理。
優(yōu)先權(quán)順序在構(gòu)造正則表達(dá)式之后,就可以象數(shù)學(xué)表達(dá)式一樣來(lái)求值,也就是說(shuō),可以從左至右并按照一個(gè)優(yōu)先權(quán)順序來(lái)求值。 下表從最高優(yōu)先級(jí)到最低優(yōu)先級(jí)列出各種正則表達(dá)式操作符的優(yōu)先權(quán)順序:
操作符 | 描述 |
---|---|
轉(zhuǎn)義符 | |
(), (?:), (?=), [] | 圓括號(hào)和方括號(hào) |
*, +, ?, {n}, {n,}, {n,m} | 限定符 |
^, $, anymetacharacter | 位置和順序 |
字符 | 匹配 |
---|---|
[...] | 方括號(hào)內(nèi)的任意字符 |
1 | 不在方括號(hào)內(nèi)的任意字符 |
. | 除了換行符和其他Unicode行終止符之外的任意字符 |
w | 任何ASCII字符組成的單詞,等價(jià)于[a-zA-Z0-9] |
W | 任何不是ASCII字符組成的單詞,等價(jià)于2 |
s | 任何Unicode空白符 |
S | 任何非Unicode空白符的字符 |
d | 任何ASCII數(shù)字,介于[0-9] |
D | 除了ASCII數(shù)字之外的任何字符,等價(jià)于3 |
退格直接量 |
字符 | 匹配 |
---|---|
{n,m} | 匹配前一項(xiàng)至少n次,但不能超過(guò)m次 |
{n,} | 匹配前一項(xiàng)n次或更多次 |
{n} | 匹配前一項(xiàng)n次 |
? | 匹配前一項(xiàng)0次或者1次,也就是說(shuō)前一項(xiàng)是可選的,等價(jià)于{0,1} |
+ | 匹配前一項(xiàng)1次或多次,等價(jià)于{1,} |
* | 匹配前一項(xiàng)0次或多次,等價(jià)于{0,} |
元字符/元符號(hào) | 匹配 |
---|---|
$ | 匹配字符串的結(jié)尾,在多行檢索中,匹配一行的結(jié)尾 |
^ | 匹配字符串的開(kāi)頭,在多行檢索中,匹配一行的開(kāi)頭 |
A | 只有匹配字符串開(kāi)始處 |
匹配單詞邊界,詞在 []內(nèi)時(shí)無(wú)效 | |
B | 匹配非單詞邊界 |
G | 匹配當(dāng)前搜索的開(kāi)始位置 |
匹配字符串結(jié)束處或行尾 | |
z | 只匹配字符串結(jié)束處 |
元字符/元符號(hào) | 匹配情況 |
---|---|
(string) | 用于反向引用的分組 |
1 或$1 | 匹配第一個(gè)分組中的內(nèi)容 |
2 或$2 | 匹配第二個(gè)分組中的內(nèi)容 |
3 或$3 | 匹配第三個(gè)分組中的內(nèi)容 |
字符 含義 i 執(zhí)行不區(qū)分大小寫(xiě)的匹配 g 執(zhí)行一個(gè)全局匹配,即找到所有匹配而非一次匹配 m 多行匹配模式,^匹配一行的開(kāi)頭和字符串開(kāi)頭,$匹配行的結(jié)束和字符串的結(jié)尾RegExp的方法
RegExp 對(duì)象有 3 個(gè)方法:test()、exec() 以及 compile()。
test():檢索字符串中的指定值。返回值是布爾值。 exec():返回一個(gè)數(shù)組,數(shù)組中的第一個(gè)條目是第一個(gè)匹配,其他的是反向引用 compile() 既可以改變檢索模式,也可以添加或刪除第二個(gè)參數(shù)。String 對(duì)象中的正則表達(dá)式方法
方法 | 含義 |
---|---|
match(pattern) | 返回 pattern 中的子串或 null |
replace(pattern, replacement) | 用 replacement 替換 pattern |
search(pattern) | 返回字符串中 pattern 開(kāi)始位置 |
split(pattern) | 返回字符串按指定 pattern 拆分的數(shù)組 |
構(gòu)造正則表達(dá)式的方法和創(chuàng)建數(shù)學(xué)表達(dá)式的方法一樣。也就是用多種元字符與操作符將小的表達(dá)式結(jié)合在一起來(lái)創(chuàng)建更大的表達(dá)式。
可以通過(guò)在一對(duì)分隔符之間放入表達(dá)式模式的各種組件來(lái)構(gòu)造一個(gè)正則表達(dá)式。
對(duì) js 而言,分隔符為一對(duì)正斜杠 (/) 字符。例如:
/expression/
對(duì) VBScript 而言,則采用一對(duì)引號(hào) ("") 來(lái)確定正則表達(dá)式的邊界。例如:
"expression"看個(gè)例子
//匹配帳號(hào)是否合法(字母開(kāi)頭,允許5-16字節(jié),允許字母數(shù)字下劃線
var re =new RegExp("^[a-zA-Z][a-zA-Z0-9_]{5,19}$"); `if(re.test(aaaa)){ alert("格式正確"); }else{ alert("格式錯(cuò)誤"); }
正則表達(dá)式的組件可以是單個(gè)的字符、字符集合、字符范圍、字符間的選擇或者所有這些組件的任意組合。
match 方法/*使用 match 方法獲取獲取匹配數(shù)組*/ var pattern = /box/ig;//全局搜索 var str = "This is a Box!,That is a Box too"; alert(str.match(pattern)); //匹配到兩個(gè) Box,Box console.log(str.match(pattern).length);//獲取數(shù)組的長(zhǎng)度search方法
/*使用 search 來(lái)查找匹配數(shù)據(jù)*/ var pattern = /box/ig; var str = "This is a Box!,That is a Box too"; console.log(str.search(pattern));//查找到返回位置,否則返回 -1
PS:因?yàn)?search 方法查找到即返回,也就是說(shuō)無(wú)需 g 全局
replace方法/*使用 replace 替換匹配到的數(shù)據(jù)*/ var pattern = /box/ig; var str = "This is a Box!,That is a Box too"; console.log(str.replace(pattern, "Cat"));//將 Box 替換成了 Catsplit方法
/*使用 split 拆分成字符串?dāng)?shù)組*/ var pattern = / /ig; var str = "This is a Box!,That is a Box too"; console.log(str.split(pattern));//將空格拆開(kāi)分組成數(shù)組exec方法
/* 統(tǒng)計(jì)子字符串出現(xiàn)的所有位置*/ function count(str){ var b,r=/def/g; while(b = r.exec(str)){ console.log(b); } } count("abcdefabcdefabcdefabcdef");
輸出:
[ "def", index: 3, input: "abcdefabcdefabcdefabcdef" ] [ "def", index: 9, input: "abcdefabcdefabcdefabcdef" ] [ "def", index: 15, input: "abcdefabcdefabcdefabcdef" ] [ "def", index: 21, input: "abcdefabcdefabcdefabcdef" ]正則表達(dá)式選擇
一個(gè)正則表達(dá)式選擇包含1個(gè)或多個(gè)正則表達(dá)式序列。這些序列被豎線(|)字符分隔。如果這些序列中的任何一項(xiàng)符合匹配條件,那么這個(gè)選擇就被匹配。他會(huì)按順序依次匹配
"into".match(/in | int/);
以上將在into中匹配in。但他不會(huì)匹配int,因?yàn)?b>in已經(jīng)匹配成功了。
正則表達(dá)式轉(zhuǎn)義/ [ ] () { } ? + * | . ^ $
如果希望按字面去匹配上面的字符,那么必須用一個(gè)前綴來(lái)進(jìn)行轉(zhuǎn)義。前綴不能使字母或數(shù)字字面化。
f : 換頁(yè)符 : 換行符 : 回車(chē)符 : 制表(tab)符 ^ 匹配 ^ 符號(hào)本身 $ 匹配 $ 符號(hào)本身 . 匹配小數(shù)點(diǎn)(.)本身實(shí)例
String.prototype.trim = function () { return this.replace(/(^s*)|(s*$)/g,""); };
^表示字符串必須以后面的規(guī)則開(kāi)頭,而(^s*) 表示的就是以0個(gè)空格或者多個(gè)空格開(kāi)頭,后面的(s*$) 的意思就是, 以0個(gè)空格或者多個(gè)空格結(jié)尾。
匹配特定字符串^[A-Za-z]+$ //匹配由26個(gè)英文字母組成的字符串 ^[A-Z]+$ //匹配由26個(gè)英文字母的大寫(xiě)組成的字符串 ^[a-z]+$ //匹配由26個(gè)英文字母的小寫(xiě)組成的字符串 ^[A-Za-z0-9]+$ //匹配由數(shù)字和26個(gè)英文字母組成的字符串 ^w+$ //匹配由數(shù)字、26個(gè)英文字母或者下劃線組成的字符串
評(píng)注:最基本也是最常用的一些表達(dá)式
思維導(dǎo)圖... ?
a-zA-Z0-9 ?
0-9 ?
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/85297.html
摘要:模板語(yǔ)法四種詞法定義二空白符號(hào)空白符號(hào)分類(lèi)或稱(chēng)是,是縮進(jìn)符,字符串中寫(xiě)的。注意換行符會(huì)影響的兩個(gè)重要語(yǔ)法特性自動(dòng)插入分號(hào)和規(guī)則。 筆記說(shuō)明 重學(xué)前端是程劭非(winter)【前手機(jī)淘寶前端負(fù)責(zé)人】在極客時(shí)間開(kāi)的一個(gè)專(zhuān)欄,每天10分鐘,重構(gòu)你的前端知識(shí)體系,筆者主要整理學(xué)習(xí)過(guò)程的一些要點(diǎn)筆記以及感悟,完整的可以加入winter的專(zhuān)欄學(xué)習(xí)【原文有winter的語(yǔ)音】,如有侵權(quán)請(qǐng)聯(lián)系我,郵箱...
摘要:模板語(yǔ)法四種詞法定義二空白符號(hào)空白符號(hào)分類(lèi)或稱(chēng)是,是縮進(jìn)符,字符串中寫(xiě)的。注意換行符會(huì)影響的兩個(gè)重要語(yǔ)法特性自動(dòng)插入分號(hào)和規(guī)則。 筆記說(shuō)明 重學(xué)前端是程劭非(winter)【前手機(jī)淘寶前端負(fù)責(zé)人】在極客時(shí)間開(kāi)的一個(gè)專(zhuān)欄,每天10分鐘,重構(gòu)你的前端知識(shí)體系,筆者主要整理學(xué)習(xí)過(guò)程的一些要點(diǎn)筆記以及感悟,完整的可以加入winter的專(zhuān)欄學(xué)習(xí)【原文有winter的語(yǔ)音】,如有侵權(quán)請(qǐng)聯(lián)系我,郵箱...
摘要:模板語(yǔ)法四種詞法定義二空白符號(hào)空白符號(hào)分類(lèi)或稱(chēng)是,是縮進(jìn)符,字符串中寫(xiě)的。注意換行符會(huì)影響的兩個(gè)重要語(yǔ)法特性自動(dòng)插入分號(hào)和規(guī)則。 筆記說(shuō)明 重學(xué)前端是程劭非(winter)【前手機(jī)淘寶前端負(fù)責(zé)人】在極客時(shí)間開(kāi)的一個(gè)專(zhuān)欄,每天10分鐘,重構(gòu)你的前端知識(shí)體系,筆者主要整理學(xué)習(xí)過(guò)程的一些要點(diǎn)筆記以及感悟,完整的可以加入winter的專(zhuān)欄學(xué)習(xí)【原文有winter的語(yǔ)音】,如有侵權(quán)請(qǐng)聯(lián)系我,郵箱...
摘要:如果你知道正則表達(dá)式模式將會(huì)改變,或者你事先不知道什么模式,而是從另一個(gè)來(lái)源獲取,如用戶(hù)輸入,這些情況都可以使用構(gòu)造函數(shù)。 為什么要使用正則表達(dá)式 正則表達(dá)式通過(guò)由普通字符和特殊字符組成的文字模板完成對(duì)字符串的校驗(yàn),搜索,替換。在javascript中類(lèi)似這樣 /^1d{10}$/ 上面的這個(gè)簡(jiǎn)單的正則用來(lái)匹配手機(jī)號(hào)至于說(shuō)正則表達(dá)式到底有什么意義,借由《精通正則表達(dá)式》里面的一句話來(lái)概...
閱讀 1096·2021-11-24 09:39
閱讀 2798·2021-09-26 09:55
閱讀 18342·2021-08-23 09:47
閱讀 3666·2019-08-30 15:52
閱讀 921·2019-08-29 13:49
閱讀 1080·2019-08-23 18:00
閱讀 917·2019-08-23 16:42
閱讀 1740·2019-08-23 14:28