新聞中心
正則表達(dá)式是一種更為強(qiáng)大的字符串匹配、字符串查找、字符串替換等操作工具。今天來(lái)學(xué)習(xí)一下 JavaScript 中的正則表達(dá)式!

一、基本概念
正則表達(dá)式(Regular Expression,在代碼中常簡(jiǎn)寫為regex、regexp或RE)使用單個(gè)字符串來(lái)描述、匹配一系列符合某個(gè)句法規(guī)則的字符串搜索模式。搜索模式可用于文本搜索和文本替換。它用一系列字符定義搜索模式。
正則表達(dá)式的用途有很多,比如:
- 表單輸入驗(yàn)證。
- 搜索和替換。
- 過(guò)濾大量文本文件(如日志)中的信息。
- 讀取配置文件。
- 網(wǎng)頁(yè)抓取。
- 處理具有一致語(yǔ)法的文本文件,例如 CSV。
正則表達(dá)式的語(yǔ)法如下:
/正則表達(dá)式主體/修飾符(可選)
先來(lái)看一個(gè)最基本的正則表達(dá)式:??/處/??,它只匹配到了字符串中的第一個(gè)“處”:
這里,正則表達(dá)式的主體就是“處”,沒(méi)有使用修飾符,我們會(huì)在后面來(lái)介紹正則表達(dá)式的修飾符。
二、創(chuàng)建方式
創(chuàng)建正則表達(dá)式的方式有兩種:
- 字面量:正則表達(dá)式直接放在?
?/ /??之中:
const rex = /pattern/;
- 構(gòu)造函數(shù):RegExp 對(duì)象表示正則表達(dá)式的一個(gè)實(shí)例:
const rex = new RegExp("pattern");這兩種方法的一大區(qū)別是對(duì)象的構(gòu)造函數(shù)允許傳遞帶引號(hào)的表達(dá)式,通過(guò)這種方式就可以動(dòng)態(tài)創(chuàng)建正則表達(dá)式。
通過(guò)這兩種方法創(chuàng)建出來(lái)的 Regex 對(duì)象都具有相同的方法和屬性:
let RegExp1 = /a|b/
let RegExp2 = new RegExp('a|b')
console.log(RegExp1) // 輸出結(jié)果:/a|b/
console.log(RegExp2) // 輸出結(jié)果:/a|b/
三、模式匹配
關(guān)于正則表達(dá)式最復(fù)雜的地方就是如何編寫正則規(guī)則了,下面就來(lái)看如何編寫正則表達(dá)式。
1、字符集合
如果我們想匹配 bat、cat 和 fat 這種類型的字符串該怎么辦?可以通過(guò)使用字符集合來(lái)做到這一點(diǎn),用 [] 表示,它會(huì)匹配包含的任意一個(gè)字符。這里就可以使用??/[bcf]at/ig??:
可以看到,這里匹配到了字符串中的 bat、cat、fat。因?yàn)槲覀兪褂昧?g 修飾符,所以匹配到了三個(gè)結(jié)果。
當(dāng)然,字符集也可以用來(lái)匹配數(shù)字:
2、字符范圍
如果我們想要在字符串中匹配所有以 at 結(jié)尾的單詞,最直接的方式是使用字符集,并在其中提供所有的字母。對(duì)于這種在一個(gè)范圍中的字符, 就可以直接定義字符范圍,用??-???表示。它用來(lái)匹配指定范圍內(nèi)的任意字符。這里就可以使用??/[a-z]at/ig???。
可以看到,正則表達(dá)式按照我們的預(yù)期匹配了。
常見(jiàn)的使用范圍的方式如下:
- 部分范圍:?
?[a-f]??,匹配 a 到 f 的任意字符。 - 小寫范圍:?
?[a-z]??,匹配 a 到 z 的任意字符。 - 大寫范圍:?
?[A-Z]??,匹配 A 到 Z 的任意字符。 - 數(shù)字范圍:?
?[0-9]??,匹配 0 到 9 的任意字符。 - 符號(hào)范圍:?
?[#$%&@]??。 - 混合范圍:?
?[a-zA-Z0-9]??,匹配所有數(shù)字、大小寫字母中的任意字符。
3. 數(shù)量字符
如果想要匹配三個(gè)字母的單詞,根據(jù)上面我們學(xué)到的字符范圍,可以這樣來(lái)寫:
[a-z][a-z][a-z]
這里我們匹配的三個(gè)字母的單詞,那如果想要匹配10個(gè)、20個(gè)字母的單詞呢?難道要一個(gè)個(gè)來(lái)寫范圍嗎?有一種更好的方法就是使用花括號(hào)??{}??來(lái)表示,來(lái)看例子:
可以看到,這里我們匹配到了所有連續(xù)5個(gè)字母的單詞(包括超過(guò)5個(gè)字母的單詞,不過(guò)只會(huì)匹配到前5個(gè)字母)。
其實(shí)匹配重復(fù)字符的完整語(yǔ)法是這樣的:??{m,n}??,它會(huì)匹配前面一個(gè)字符至少 m 次至多 n 次重復(fù),{m}表示匹配 m 次,{m,}表示至少 m 次。
所以,當(dāng)我們給5后面加上逗號(hào)時(shí),就表示至少匹配五次:
所以這里就匹配到了所有連續(xù)5個(gè)或5個(gè)以上的單詞。
當(dāng)匹配次數(shù)為至少4次,至多5次時(shí),匹配結(jié)果如下:
除了可以使用大括號(hào)來(lái)匹配一定數(shù)量的字符,還有三個(gè)相關(guān)的模式:
- ?
?+???:匹配前面一個(gè)表達(dá)式一次或者多次,相當(dāng)于??{1,}??。 - ?
?*???:匹配前面一個(gè)表達(dá)式0次或者多次,相當(dāng)于??{0,}??。 - ?
?????:?jiǎn)为?dú)使用匹配前面一個(gè)表達(dá)式零次或者一次,相當(dāng)于??{0,1}??,如果跟在量詞*、+、?、{}后面的時(shí)候?qū)?huì)使量詞變?yōu)榉秦澙纺J剑ūM量匹配少的字符),默認(rèn)是使用貪婪模式。
來(lái)看一個(gè)簡(jiǎn)單的例子,這里我們匹配的正則表達(dá)式為??/a+/ig??,結(jié)果如下:
它和??/a{1,}/ig???的匹配結(jié)果是一樣的:
使用??/[a-z]+/ig???就可以匹配任意長(zhǎng)度的純字母單詞:
4、元字符
使用元字符可以編寫更緊湊的正則表達(dá)式模式。常見(jiàn)的元字符如下:
- ?
?\d???:相當(dāng)于??[0-9]??,匹配任意數(shù)字。 - ?
?\D???:相當(dāng)于??[^0-9]??。 - ?
?\w???:相當(dāng)于??[0-9a-zA-Z]??,匹配任意數(shù)字、大小寫字母和下劃線。 - ?
?\W??:相當(dāng)于:[^0-9a-zA-Z]。 - ?
?\s???:相當(dāng)于??[\t\v\n\r\f]???,匹配任意空白符,包括空格,水平制表符??\t???,垂直制表符??\v???,換行符??\n???,回車符??\r???,換頁(yè)符??\f??。 - ?
?\S???:相當(dāng)于??[^\t\v\n\r\f]??,表示非空白符。
來(lái)看一個(gè)簡(jiǎn)單的例子:
這里使用??\d??來(lái)匹配任意數(shù)字、字母和下劃線。這里就匹配到了7個(gè)連續(xù)四位的字符。
5、特殊字符
使用特殊字符可以編寫更高級(jí)的模式表達(dá)式,常見(jiàn)的特殊字符如下:
- ?
?.??:匹配除了換行符之外的任何單個(gè)字符。 - ?
?\??:將下一個(gè)字符標(biāo)記為特殊字符、或原義字符、或向后引用、或八進(jìn)制轉(zhuǎn)義符。 - ?
?|??:邏輯或操作符。 - ?
?[^]??:取非,匹配未包含的任意字符。
來(lái)看一個(gè)簡(jiǎn)單的例子,如果我們使用 ??/ab*/ig?? 進(jìn)行匹配,結(jié)果就如下:
那我們就是想要匹配 * 怎么辦?就可以使用 ??\?? 對(duì)其進(jìn)行轉(zhuǎn)義:
這樣就只會(huì)匹配到 ??ab*?? 了。
或匹配也很簡(jiǎn)單,來(lái)看例子,匹配規(guī)則為:??/ab|cd/ig??,匹配結(jié)果如下:
這里就會(huì)匹配到字符串中所有 ??ab??? 和 ??cd??? 字符。那如果想要匹配 ??sabz??? 或者??scdz??呢?開(kāi)頭和結(jié)尾是相同的,只有中間的兩個(gè)字符是可選的。其實(shí)只需要給中間的或部分加上括號(hào)就可以了:
取非規(guī)則在范圍中使用,來(lái)看例子:
這里匹配到了所有非字母的字符。
6、位置匹配
如果我們想匹配字符串中以某些字符結(jié)尾的單詞,以某些字符開(kāi)頭的單詞該如何實(shí)現(xiàn)呢?正則表達(dá)式中提供了方法通過(guò)位置來(lái)匹配字符:
- ?
?\b??:匹配一個(gè)單詞邊界,也就是指單詞和空格間的位置。 - ?
?\B??:匹配非單詞邊界。 - ?
?^??:匹配開(kāi)頭,在多行匹配中匹配行開(kāi)頭。 - ?
?$??:匹配結(jié)尾,在多行匹配中匹配行結(jié)尾。 - ?
?(?=p)??:匹配 p 前面的位置。 - ?
?(?!=p)??:匹配不是 p 前面的位置。
最常見(jiàn)的就是匹配開(kāi)始和結(jié)束位置。先來(lái)看一個(gè)開(kāi)始位置的匹配,這里使用 ??/^ex/igm??? 來(lái)匹配多行中以??ex?? 開(kāi)頭的行:
使用??/e$/igm??來(lái)匹配以 e 結(jié)尾的行:
可以使用 ??\w+$ ??來(lái)匹配每一行的最后一個(gè)單詞:
需要注意,這里我們都使用 ??m?? 修飾符開(kāi)啟了多行模式。
使用 ??/(?=the)/ig??? 來(lái)匹配字符串中??the??前的面的位置:
我們可以使用??\b??來(lái)匹配單詞的邊界,匹配的結(jié)果如下:
這可能比較難理解,我們可以使用以下正則表達(dá)式來(lái)匹配完整的單詞:??\b\w+\b??,匹配結(jié)果如下:
四、修飾符
正則表達(dá)式常見(jiàn)的修飾符如下:
- ?
?g??:表示全局模式,即運(yùn)用于所有字符串。 - ?
?i??:表示不區(qū)分大小寫,即匹配時(shí)忽略字符串的大小寫。 - ?
?m??:表示多行模式,強(qiáng)制 $ 和 ^ 分別匹配每個(gè)換行符。
這些修飾符總是用在最后一個(gè)正斜杠后面,可以一起使用。下面來(lái)分別看看這些修飾符的作用。
最開(kāi)始的例子中,字符串中有兩個(gè)“處”,但是只匹配到了一個(gè)。這是因?yàn)檎齽t表達(dá)式默認(rèn)匹配第一個(gè)符合條件的字符。如果想要匹配所有符合條件的字符,就可以使用 ??g?? 修飾符:
/處/g
這樣就匹配到了所有符合條件的字符:
當(dāng)需要匹配引英文字符串,并且忽略字符串的字母大小寫時(shí),??i?? 修飾符就派上用場(chǎng)了。先來(lái)看下面的表達(dá)式:
/a/g
在進(jìn)行匹配時(shí),它匹配到了字符串中所有的 ??a??? 字符。但是最開(kāi)始的 ??A?? 是沒(méi)匹配到的,因?yàn)閮烧叽笮懖灰恢拢?/p>
那我們來(lái)添加上 ??i?? 修飾符:
/a/gi
這時(shí)所有的 ??a??? 都被匹配到了,無(wú)論是大寫還是小寫,總共匹配到了三個(gè) ??a??:
還有一個(gè)小疑問(wèn), 如果是對(duì)象構(gòu)造函數(shù)的方式來(lái)構(gòu)造正則表達(dá)式使,如何添加這些修飾符呢?其實(shí)很簡(jiǎn)單,只要將修飾符作為第二個(gè)參數(shù)傳遞給 構(gòu)造函數(shù)就可以了:
let regExp = new RegExp('[2b|^2b]', 'gi')
console.log(regExp) // 輸出結(jié)果:/[2b|^2b]/gi
五、RegExp 實(shí)例
1、實(shí)例方法
RegExp 實(shí)例置了??test()???和??exec()?? 這兩個(gè)方法來(lái)校驗(yàn)正則表達(dá)式。下面來(lái)分別看一下這兩個(gè)方法。
(1)test()??test()??用于檢測(cè)一個(gè)字符串是否匹配某個(gè)模式,如果字符串中含有匹配的文本,則返回 true,否則返回 false。
const regex1 = /a/ig;
const regex2 = /hello/ig;
const str = "Action speak louder than words";
console.log(regex1.test(str)); // true
console.log(regex2.test(str)); // false
(2)exec()??exec()??用于檢索字符串中的正則表達(dá)式的匹配。該函數(shù)返回一個(gè)數(shù)組,其中存放匹配的結(jié)果。如果未找到匹配,則返回值為 null。
const regex1 = /a/ig;
const regex2 = /hello/ig;
const str = "Action speak louder than words";
console.log(regex1.exec(str)); // ['A', index: 0, input: 'Action speak louder than words', groups: undefined]
console.log(regex2.exec(str)); // null
在當(dāng)在全局正則表達(dá)式中使用 ??exec??? 時(shí),每隔一次就會(huì)返回??null??,如圖:
這是怎么回事呢?MDN 的解釋如下:
在設(shè)置了 global 或 sticky 標(biāo)志位的情況下(如 /foo/g or /foo/y),JavaScript RegExp 對(duì)象是有狀態(tài)的。他們會(huì)將上次成功匹配后的位置記錄在 lastIndex 屬性中。使用此特性,exec() 可用來(lái)對(duì)單個(gè)字符串中的多次匹配結(jié)果進(jìn)行逐條的遍歷(包括捕獲到的匹配),而相比之下, String.prototype.match() 只會(huì)返回匹配到的結(jié)果。
為了解決這個(gè)問(wèn)題,我們可以在運(yùn)行每個(gè)exec命令之前將??lastIndex??賦值為 0:
2、實(shí)例屬性
RegExp實(shí)例還內(nèi)置了一些屬性,這些屬性可以獲知一個(gè)正則表達(dá)式的各方面的信息,但是用處不大。
|
屬性 |
描述 |
|
global |
布爾值,表示是否設(shè)置了g標(biāo)志 |
|
ignoreCase |
布爾值,表示是否設(shè)置了i標(biāo)志 |
|
lastIndex |
整數(shù),表示開(kāi)始搜索下一個(gè)匹配項(xiàng)的字符位置,從0算起 |
|
multiline |
布爾值,表示是否設(shè)置了m標(biāo)志 |
|
source |
正則表達(dá)式的字符串表示,按照字面量形式而非傳入構(gòu)造函數(shù)重大的字符串模式匹配 |
六、字符串方法
在 JavaScript 中有6種常用的方法是支持正則表達(dá)式的,下面來(lái)分別看看這些方法。
1、search()
??search()?? 方法用于檢索字符串中指定的子字符串,或檢索與正則表達(dá)式相匹配的子字符串,并返回子串的起始位置。如果沒(méi)有找到任何匹配的子串,則返回 -1。
const regex1 = /a/ig;
const regex2 = /p/ig;
const regex3 = /m/ig;
const str = "Action speak louder than words";
console.log(str.search(regex1)); // 輸出結(jié)果:0
console.log(str.search(regex2)); // 輸出結(jié)果:8
console.log(str.search(regex3)); // 輸出結(jié)果:-1
可以看到,??search()?? 方法只會(huì)返回匹配到的第一個(gè)字符的索引值,當(dāng)沒(méi)有匹配到相應(yīng)的值時(shí),就會(huì)返回-1。
2、match()
??match()??? 方法可在字符串內(nèi)檢索指定的值,或找到一個(gè)或多個(gè)正則表達(dá)式的匹配。如果沒(méi)有找到任何匹配的文本, ??match()??? 將返回 ??null??。否則,它將返回一個(gè)數(shù)組,其中存放了與它找到的匹配文本有關(guān)的信息。
const regex1 = /a/ig;
const regex2 = /a/i;
const regex3 = /m/ig;
const str = "Action speak louder than words";
console.log(str.match(regex1)); // 輸出結(jié)果:['A', 'a', 'a']
console.log(str.match(regex2)); // 輸出結(jié)果:['A', index: 0, input: 'Action speak louder than words', groups: undefined]
console.log(str.match(regex3)); // 輸出結(jié)果:null
可以看到,當(dāng)沒(méi)有 ??g??? 修飾符時(shí),就只能在字符串中執(zhí)行一次匹配,如果想要匹配所有符合條件的值,就需要添加 ??g?? 修飾符。
3、matchAll()
??matchAll()??? 方法返回一個(gè)包含所有匹配正則表達(dá)式的結(jié)果及分組捕獲組的迭代器。因?yàn)榉祷氐氖潜闅v器,所以通常使用??for...of??循環(huán)取出。
for (const match of 'abcabc'.matchAll(/a/g)) {
console.log(match)
}
//["a", index: 0, input: "abcabc", groups: undefined]
//["a", index: 3, input: "abcabc", groups: undefined]需要注意,該方法的第一個(gè)參數(shù)是一個(gè)正則表達(dá)式對(duì)象,如果傳的參數(shù)不是一個(gè)正則表達(dá)式對(duì)象,則會(huì)隱式地使用 ??new RegExp(obj)??? 將其轉(zhuǎn)換為一個(gè) ??RegExp??? 。另外,RegExp必須是設(shè)置了全局模式??g???的形式,否則會(huì)拋出異常 ??TypeError??。
4、replace()
??replace()?? 用于在字符串中用一些字符串替換另一些字符串,或替換一個(gè)與正則表達(dá)式匹配的子串。
const regex = /A/g;
const str = "Action speak louder than words";
console.log(str.replace(regex, 'a')); // 輸出結(jié)果:action speak louder than words
可以看到,第一個(gè)參數(shù)中的正則表達(dá)式匹配到了字符串的第一個(gè)大寫的 A,并將其替換為了第二個(gè)參數(shù)中的小寫的 a。
5、replaceAll()
??replaceAll()?? 方法用于在字符串中用一些字符替換另一些字符,或替換一個(gè)與正則表達(dá)式匹配的子串,該函數(shù)會(huì)替換所有匹配到的子字符串。
const regex = /a/g;
const str = "Action speak louder than words";
console.log(str.replaceAll(regex, 'A')); // 輸出結(jié)果:Action speAk louder thAn words
需要注意,當(dāng)使用一個(gè) ??regex??? 時(shí),您必須設(shè)置全局("g")標(biāo)志, 否則,它將引發(fā) ??TypeError??:"必須使用全局 RegExp 調(diào)用 replaceAll"。
6、split()
??split()?? 方法用于把一個(gè)字符串分割成字符串?dāng)?shù)組。其第一個(gè)參數(shù)是一個(gè)字符串或正則表達(dá)式,從該參數(shù)指定的地方分割字符串。
const regex = / /gi;
const str = "Action speak louder than words";
console.log(str.split(regex)); // 輸出結(jié)果:['Action', 'speak', 'louder', 'than', 'words']
這里的 ??regex?? 用來(lái)匹配空字符串,所以最終在字符串的每個(gè)空格處將字符串拆成了數(shù)組。
七、實(shí)際應(yīng)用
下面來(lái)通過(guò)正則表達(dá)式的幾個(gè)實(shí)際應(yīng)用來(lái)鞏固一下上面的知識(shí)。
1、匹配密碼
檢查密碼的格式,其包含至少一個(gè)大寫字母、小寫字母、數(shù)字、符號(hào),長(zhǎng)度為8-12位:
/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*\W).{8,12}$/g這里我們主要使用了正則表達(dá)式中的正向前瞻,正向前瞻語(yǔ)法為??(?=pattern)???,即在目標(biāo)字符串的相應(yīng)位置必須有??pattern??部分匹配的內(nèi)容,但不作為匹配結(jié)果處理,更不會(huì)存儲(chǔ)在緩沖區(qū)內(nèi)供以后使用。來(lái)看一下這個(gè)正則表達(dá)式的每一部分的含義:
- ?
?(?=.*[a-z])??:匹配任何后面跟著小寫字母的字符。 - ?
?(?=.*[A-Z])??:匹配任何后面跟著大寫字母的字符。 - ?
?(?=.*\d)??:匹配任何后面跟著數(shù)字的字符。 - ?
?(?=.*\W)??:匹配任何后面跟著符號(hào)的字符。 - ?
?.{8,12}??:匹配的長(zhǎng)度至少為 8 個(gè)字符,至多為12個(gè)字符。 - ?
?^???和??$??可以保證匹配從字符串的開(kāi)頭到結(jié)尾進(jìn)行匹配,也就是只對(duì)整個(gè)密碼進(jìn)行匹配,不考慮部分匹配。
下面是測(cè)試結(jié)果:
2、匹配郵箱
檢查電子郵箱的地址:
/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[ a-zA-Z0-9-]+)*$/g下面來(lái)看一下這個(gè)正則表達(dá)式每一部分的含義:
- ?
?^[a-zA-Z0-9.!#$%&'*+/=?^_???~-]+??:檢查是否使用了所有有效字符并且至少有了一個(gè)(末尾的??+`用于檢查是否至少有一個(gè)字符)。 - ?
?[a-zA-Z0-9-]+??:這一部分用來(lái)檢驗(yàn)主機(jī)名是否有效,主機(jī)名可以是大小寫字母、數(shù)字、中橫線。最后的 + 表示至少有一位。 - ?
?(?:\.[a-zA-Z0-9-]+)*???:這一部分是可選的域名后綴,這里使用的??*?? 就表示前面的字符是0個(gè)或者多個(gè),這樣.com、.com.cn等域名都可以匹配到。 - ?
?^???和??$??可以保證匹配從字符串的開(kāi)頭到結(jié)尾進(jìn)行匹配,也就是只對(duì)整個(gè)郵箱字符串進(jìn)行匹配,不考慮部分匹配。
下面是測(cè)試結(jié)果:
3、匹配數(shù)字
檢查數(shù)字是否是整數(shù):??/^\d+$/???,其中??\d+??表示至少有一位數(shù)字。測(cè)試結(jié)果如下:
檢查數(shù)字是否是小數(shù):??/^\d*\.\d+$/???,其中??\d*??? 表示至少有0位數(shù)字,??\.???就是把小數(shù)點(diǎn)進(jìn)行了轉(zhuǎn)義操作,??\d+??就表示至少有一位小數(shù)位。測(cè)試結(jié)果如下:
校驗(yàn)一個(gè)數(shù)字是不是一個(gè)金額:??/^\d+(.\d{2})?$/??。
八、實(shí)用工具
1、Regex101
Regex101 是學(xué)習(xí)正則表達(dá)式最有效的工具網(wǎng)站之一。在REGULAR EXPRESSION欄中可以輸入正則表達(dá)式,可以在輸入框右側(cè)選擇需要的修飾符,在下面的TEST STRING欄中輸入要測(cè)試的字符串,即可顯示出匹配到的結(jié)果。在右側(cè)的EXPLANATION區(qū)域會(huì)顯示出對(duì)輸入的正則表達(dá)式的詳細(xì)解釋。右下角的 QUICK REFERENCE 欄會(huì)顯示正則表達(dá)式速查表。
Regex101 還支持在上面練習(xí)編寫正則表達(dá)式:
可以在上面搜索一些正則表達(dá)式的庫(kù):
除此之外,我們還可以使用 RegexDebugger 來(lái)跟蹤匹配的過(guò)程。更多功能可以在Regex101 上進(jìn)行探索。
官網(wǎng):https://regex101.com/。
2、RegExr
RegExr 是一個(gè)基于 JavaScript 開(kāi)發(fā)的在線工具,用來(lái)創(chuàng)建、測(cè)試和學(xué)習(xí)正則表達(dá)式。它是一個(gè)開(kāi)源的工具,具有以下特性:
- 輸入時(shí),結(jié)果會(huì)實(shí)時(shí)更新。
- 支持 JavaScript 和 PHP/PCRE RegEx。
- 將匹配項(xiàng)或表達(dá)式移至詳細(xì)信息。
- 保存并與他人共享表達(dá)式。
- 使用工具探索結(jié)果。
- 瀏覽參考以獲取幫助和示例。
- 在編輯器中使用 cmd-Z/Y 撤消和重做。
- 官網(wǎng):https://regexr.com/
3、Regex Pal
Regexpal 是一個(gè)基于 Javascript 的在線正則表達(dá)式驗(yàn)證工具。它的頁(yè)面非常簡(jiǎn)潔,只有兩個(gè)輸入框,上面的輸入框中可以輸入正則表達(dá)式(匹配規(guī)則),下面的輸入框可以輸入待匹配的數(shù)據(jù)。此外,根據(jù)具體要求,還可以設(shè)置忽略大小寫、多行匹配等參數(shù)。
官網(wǎng):https://www.regexpal.com/、
4、Regex-Vis
Regex-Vis 是一個(gè)輔助學(xué)習(xí)、編寫和驗(yàn)證正則的工具。它不僅能對(duì)正則進(jìn)行可視化展示,而且提供可視編輯正則的能力。在輸入一個(gè)正則表達(dá)式后,會(huì)生成它的可視化圖形。然后可以點(diǎn)選或框選圖形中的單個(gè)或多個(gè)節(jié)點(diǎn),再在右側(cè)操作面板對(duì)其進(jìn)行操作,具體操作取決于節(jié)點(diǎn)的類型,比如在其右側(cè)插入空節(jié)點(diǎn)、為節(jié)點(diǎn)編組、為節(jié)點(diǎn)增加量詞等。
官網(wǎng):https://regex-vis.com/。
5、Regex previewer
Regex previewer 是一個(gè) VScode 插件,在插件市場(chǎng)搜索名稱即可安裝。當(dāng)我們?cè)诰帉懻齽t表達(dá)式時(shí),可以直接使用快捷鍵 Ctrl+Alt+M (windows)或者 ???+?+M??(Mac)在編輯器右側(cè)啟動(dòng)一個(gè)標(biāo)簽頁(yè),我們可以在這個(gè)標(biāo)簽頁(yè)寫一寫測(cè)試用例,用來(lái)測(cè)試我們寫的正則表達(dá)式,寫完字符串用例之后,點(diǎn)擊我們編寫的正則表達(dá)式上方的 Test Regex...即可,這樣右側(cè)匹配到字符就會(huì)高亮顯示了,如下圖:
當(dāng)前標(biāo)題:一篇帶給你正則表達(dá)式完整指南
標(biāo)題URL:http://www.dlmjj.cn/article/coidegs.html


咨詢
建站咨詢
