日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
一篇帶給你正則表達(dá)式完整指南

正則表達(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