正則表達(dá)式

一醋界、語(yǔ)法

1.普通字符

普通字符包括沒(méi)有顯式指定為元字符的所有可打印和不可打印字符竟宋。這包括所有大寫(xiě)和小寫(xiě)字母、所有數(shù)字形纺、所有標(biāo)點(diǎn)符號(hào)和一些其他符號(hào)丘侠。

  • . :/./g 匹配除換行符(\n、\r)之外的任何單個(gè)字符逐样,相等于[^\n\r] 蜗字。
  • [\s\S] : 匹配所有。\s 是匹配所有空白符脂新,包括換行挪捕,\S 非空白符,不包括換行争便。
  • \w :匹配字母级零、數(shù)字、下劃線(xiàn)滞乙。等價(jià)于 [A-Za-z0-9_]奏纪。

2.非打印字符

非打印字符也可以是正則表達(dá)式的組成部分鉴嗤。下表列出了表示非打印字符的轉(zhuǎn)義序列:

字符 描述
\cx 匹配由x指明的控制字符。例如序调, \cM 匹配一個(gè) Control-M 或回車(chē)符躬窜。x 的值必須為 A-Z 或 a-z 之一。否則炕置,將 c 視為一個(gè)原義的 'c' 字符荣挨。
\f 匹配一個(gè)換頁(yè)符。等價(jià)于 \x0c 和 \cL朴摊。
\n 匹配一個(gè)換行符默垄。等價(jià)于 \x0a 和 \cJ。
\r 匹配一個(gè)回車(chē)符甚纲。等價(jià)于 \x0d 和 \cM口锭。
\s 匹配任何空白字符,包括空格介杆、制表符鹃操、換頁(yè)符等等。等價(jià)于[ \f\n\r\t\v] 。注意 Unicode 正則表達(dá)式會(huì)匹配全角空格符。
\S 匹配任何非空白字符济舆。等價(jià)于 [^ \f\n\r\t\v]驹针。
\t 匹配一個(gè)制表符茬缩。等價(jià)于 \x09 和 \cI。
\v 匹配一個(gè)垂直制表符。等價(jià)于 \x0b 和 \cK。

3.特殊字符

許多元字符要求在試圖匹配它們時(shí)特別對(duì)待燃观。若要匹配這些特殊字符,必須首先使字符"轉(zhuǎn)義"便瑟,即缆毁,將反斜杠字符\ 放在它們前面。下表列出了正則表達(dá)式中的特殊字符:

特別字符 描述
$ 匹配輸入字符串的結(jié)尾位置到涂。如果設(shè)置了 RegExp 對(duì)象的 Multiline 屬性脊框,則 也匹配 '\n' 或 '\r'。要匹配 字符本身养盗,請(qǐng)使用 $缚陷。
( ) 標(biāo)記一個(gè)子表達(dá)式的開(kāi)始和結(jié)束位置适篙。子表達(dá)式可以獲取供以后使用往核。要匹配這些字符,請(qǐng)使用 ( 和 )嚷节。
* 匹配前面的子表達(dá)式零次或多次聂儒。要匹配 * 字符虎锚,請(qǐng)使用 \*。
+ 匹配前面的子表達(dá)式一次或多次衩婚。要匹配 + 字符窜护,請(qǐng)使用 \+。
. 匹配除換行符 \n 之外的任何單字符非春。要匹配 . 柱徙,請(qǐng)使用 \. 。
[ 標(biāo)記一個(gè)中括號(hào)表達(dá)式的開(kāi)始奇昙。要匹配 [护侮,請(qǐng)使用 \[。
? 匹配前面的子表達(dá)式零次或一次储耐,或指明一個(gè)非貪婪限定符羊初。要匹配 ? 字符,請(qǐng)使用 ?什湘。
\ 將下一個(gè)字符標(biāo)記為或特殊字符长赞、或原義字符、或向后引用闽撤、或八進(jìn)制轉(zhuǎn)義符得哆。例如, 'n' 匹配字符 'n'哟旗。'\n' 匹配換行符柳恐。序列 '\\' 匹配 "\",而 '\(' 則匹配 "("热幔。
^ 匹配輸入字符串的開(kāi)始位置乐设,除非在方括號(hào)表達(dá)式中使用,當(dāng)該符號(hào)在方括號(hào)表達(dá)式中使用時(shí)绎巨,表示不接受該方括號(hào)表達(dá)式中的字符集合近尚。要匹配 ^ 字符本身,請(qǐng)使用 ^场勤。
{ 標(biāo)記限定符表達(dá)式的開(kāi)始戈锻。要匹配 {,請(qǐng)使用 \{和媳。
| 指明兩項(xiàng)之間的一個(gè)選擇格遭。要匹配 |,請(qǐng)使用 |留瞳。

4.限定符

限定符用來(lái)指定正則表達(dá)式的一個(gè)給定組件必須要出現(xiàn)多少次才能滿(mǎn)足匹配拒迅。有 ***** 或 +?{n}{n,}{n,m} 共6種。正則表達(dá)式的限定符有:

字符 描述
* 匹配前面的子表達(dá)式零次或多次。例如璧微,zo* 能匹配 "z" 以及 "zoo"作箍。* 等價(jià)于{0,}。
+ 匹配前面的子表達(dá)式一次或多次前硫。例如胞得,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"屹电。+ 等價(jià)于 {1,}阶剑。
? 匹配前面的子表達(dá)式零次或一次。例如危号,"do(es)?" 可以匹配 "do" 个扰、 "does" 中的 "does" 、 "doxy" 中的 "do" 葱色。? 等價(jià)于 {0,1}递宅。
{n} n 是一個(gè)非負(fù)整數(shù)。匹配確定的 n 次苍狰。例如办龄,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的兩個(gè) o淋昭。
{n,} n 是一個(gè)非負(fù)整數(shù)俐填。至少匹配n 次。例如翔忽,'o{2,}' 不能匹配 "Bob" 中的 'o'英融,但能匹配 "foooood" 中的所有 o。'o{1,}' 等價(jià)于 'o+'歇式。'o{0,}' 則等價(jià)于 'o*'驶悟。
{n,m} m 和 n 均為非負(fù)整數(shù),其中n <= m材失。最少匹配 n 次且最多匹配 m 次痕鳍。例如,"o{1,3}" 將匹配 "fooooood" 中的前三個(gè) o龙巨。'o{0,1}' 等價(jià)于 'o?'笼呆。請(qǐng)注意在逗號(hào)和兩個(gè)數(shù)之間不能有空格。

請(qǐng)注意旨别,限定符出現(xiàn)在范圍表達(dá)式之后诗赌。例如,匹配 1~99 的正整數(shù)表達(dá)式如下:/[1-9][0-9]?/ 或者 /[1-9][0-9]{0,1}/

* 和 + 限定符都是貪婪的秸弛,因?yàn)樗鼈儠?huì)盡可能多的匹配文字铭若,只有在它們的后面加上一個(gè) ? 就可以實(shí)現(xiàn)非貪婪或最小匹配洪碳。

例如,您可能搜索 HTML 文檔奥喻,以查找在 h1 標(biāo)簽內(nèi)的內(nèi)容偶宫。HTML 代碼如下:<h1>xxxxxxxxxx</h1>

貪婪:下面的表達(dá)式匹配從開(kāi)始小于符號(hào) (<) 到關(guān)閉 h1 標(biāo)記的大于符號(hào) (>) 之間的所有內(nèi)容非迹。

/<.*>/ :匹配整個(gè)字符串

image-20210527174855562.png

非貪婪:如果您只需要匹配開(kāi)始和結(jié)束 h1 標(biāo)簽环鲤,下面的非貪婪表達(dá)式只匹配 <h1>。

/<.*?>/ 或者 /<\w+?/ :只匹配到第一個(gè)<h1>

image-20210527175024236.png

通過(guò)在 *****憎兽、+? 限定符之后放置 ?冷离,該表達(dá)式從"貪婪"表達(dá)式轉(zhuǎn)換為"非貪婪"表達(dá)式或者最小匹配。

5.定位符

定位符能夠?qū)⒄齽t表達(dá)式固定到行首或行尾纯命。它們還能夠創(chuàng)建這樣的正則表達(dá)式西剥,這些正則表達(dá)式出現(xiàn)在一個(gè)單詞內(nèi)、在一個(gè)單詞的開(kāi)頭或者一個(gè)單詞的結(jié)尾亿汞。定位符用來(lái)描述字符串或單詞的邊界瞭空,^$ 分別指字符串的開(kāi)始與結(jié)束,\b 描述單詞的前或后邊界疗我,\B 表示非單詞邊界咆畏。正則表達(dá)式的定位符有:

字符 描述
^ 匹配輸入字符串開(kāi)始的位置。如果設(shè)置了 RegExp 對(duì)象的 Multiline 屬性吴裤,^ 還會(huì)與 \n 或 \r 之后的位置匹配旧找。
$ 匹配輸入字符串結(jié)尾的位置。如果設(shè)置了 RegExp 對(duì)象的 Multiline 屬性麦牺,$ 還會(huì)與 \n 或 \r 之前的位置匹配钮蛛。
\b 匹配一個(gè)單詞邊界,即字與空格間的位置魏颓。
\B 非單詞邊界匹配。

注意:不能將限定符與定位符一起使用琼开。

匹配單詞邊界稍有不同躏精,但向正則表達(dá)式添加了很重要的能力矗烛。

/\bCha/ :配單詞 Chapter 的開(kāi)頭三個(gè)字符

/ter\b/ :匹配單詞 Chapter 中的字符串 ter

/\Bapt/ :匹配 Chapter 中的字符串 apt,但不匹配 aptitude 中的字符串 apt

6.選擇

用圓括號(hào) () 將所有選擇項(xiàng)括起來(lái)碌嘀,相鄰的選擇項(xiàng)之間用 | 分隔涣旨。

() 表示捕獲分組,() 會(huì)把每個(gè)分組里的匹配的值保存起來(lái)股冗, 多個(gè)匹配值可以通過(guò)數(shù)字 n 來(lái)查看(n 是一個(gè)數(shù)字霹陡,表示第 n 個(gè)捕獲組的內(nèi)容)。

/([1-9])([a-z]+)/ :匹配以一個(gè)數(shù)字開(kāi)頭止状,多個(gè)小寫(xiě)字母結(jié)束的字符串

const str = '123dfgsda45ghmvc67'
const n = str.match(/([1-9])([a-z]+)/g)
console.log(n) // ["3dfgsda", "5ghmvc"]

但用圓括號(hào)會(huì)有一個(gè)副作用烹棉,使相關(guān)的匹配會(huì)被緩存,此時(shí)可用 ?: 放在第一個(gè)選項(xiàng)前來(lái)消除這種副作用怯疤。

其中 ?: 是非捕獲元之一浆洗,還有兩個(gè)非捕獲元是 ?=?!,這兩個(gè)還有更多的含義集峦,前者為正向預(yù)查伏社,在任何開(kāi)始匹配圓括號(hào)內(nèi)的正則表達(dá)式模式的位置來(lái)匹配搜索字符串,后者為負(fù)向預(yù)查塔淤,在任何開(kāi)始不匹配該正則表達(dá)式模式的位置來(lái)匹配搜索字符串摘昌。

以下列出 ?=、?<=凯沪、?!第焰、?<! 的使用區(qū)別

  • exp1(?=exp2):查找 exp2 前面的 exp1。
image-20210528095858374.png
  • (?<=exp2)exp1:查找 exp2 后面的 exp1妨马。
    image-20210528100013994.png
  • exp1(?!exp2):查找后面不是 exp2 的 exp1挺举。

    image-20210528100056178.png
  • (?<!exp2)exp1:查找前面不是 exp2 的 exp1。

    image-20210528100134634.png

7.反向引用

對(duì)一個(gè)正則表達(dá)式模式或部分模式兩邊添加圓括號(hào)將導(dǎo)致相關(guān)匹配存儲(chǔ)到一個(gè)臨時(shí)緩沖區(qū)中烘跺,所捕獲的每個(gè)子匹配都按照在正則表達(dá)式模式中從左到右出現(xiàn)的順序存儲(chǔ)湘纵。緩沖區(qū)編號(hào)從 1 開(kāi)始,最多可存儲(chǔ) 99 個(gè)捕獲的子表達(dá)式滤淳。每個(gè)緩沖區(qū)都可以使用 \n 訪(fǎng)問(wèn)梧喷,其中 n 為一個(gè)標(biāo)識(shí)特定緩沖區(qū)的一位或兩位十進(jìn)制數(shù)。

可以使用非捕獲元字符 ?:脖咐、?=?! 來(lái)重寫(xiě)捕獲铺敌,忽略對(duì)相關(guān)匹配的保存。

反向引用的最簡(jiǎn)單的屁擅、最有用的應(yīng)用之一偿凭,是提供查找文本中兩個(gè)相同的相鄰單詞的匹配項(xiàng)的能力。

var str = "Is is the cost of of gasoline going up up";
var patt1 = /\b([a-z]+) \1\b/ig;
console.log(str.match(patt1)); // Is is,of of,up up

捕獲的表達(dá)式派歌,正如 [a-z]+ 指定的弯囊,包括一個(gè)或多個(gè)字母痰哨。正則表達(dá)式的第二部分是對(duì)以前捕獲的子匹配項(xiàng)的引用,即匾嘱,單詞的第二個(gè)匹配項(xiàng)正好由括號(hào)表達(dá)式匹配斤斧。\1 指定第一個(gè)子匹配項(xiàng)。

反向引用還可以將通用資源指示符 (URI) 分解為其組件霎烙。假定您想將下面的 URI 分解為協(xié)議(ftp撬讽、http 等等)、域地址和頁(yè)/路徑:

var str = "http://www.runoob.com:80/html/html-tutorial.html";
var patt1 = /(\w+):\/\/([^/:]+):(\d*)?([^# ]*)/;
arr = str.match(patt1);
console.log(arr) // ["http","www.runoob.com","80","/html/html-tutorial.html"]

二吼过、修飾符(標(biāo)記)

修飾符 含義 描述
i ignore - 不區(qū)分大小寫(xiě) 將匹配設(shè)置為不區(qū)分大小寫(xiě)锐秦,搜索時(shí)不區(qū)分大小寫(xiě): A 和 a 沒(méi)有區(qū)別咪奖。
g global - 全局匹配 查找所有的匹配項(xiàng)盗忱。
m multiline - 多行匹配 使邊界字符 ^$ 匹配每一行的開(kāi)頭和結(jié)尾,記住是多行羊赵,而不是整個(gè)字符串的開(kāi)頭和結(jié)尾趟佃。
s 特殊字符圓點(diǎn) . 中包含換行符 \n 默認(rèn)情況下的圓點(diǎn) . 是 匹配除換行符 \n 之外的任何字符,加上 s 修飾符之后, . 中包含換行符 \n昧捷。

ig是比較常用的闲昭,都比較熟悉,就不多說(shuō)了

1.m修飾符

m 修飾符可以使 ^$ 匹配一段文本中每行的開(kāi)始和結(jié)束位置靡挥。g 只匹配第一行序矩,添加 m 之后實(shí)現(xiàn)多行。

var str="runoobgoogle\ntaobao\nrunoobweibo";
var n1=str.match(/^runoob/g);   // 匹配一個(gè)
var n2=str.match(/^runoob/gm);  // 多行匹配

不加m的話(huà)跋破,只能匹配到第一行的'runoob'簸淀,加上m后可匹配到所有行的'runoob'

image-20210528105323988.png

2.s修飾符

默認(rèn)情況下的圓點(diǎn) . 是 匹配除換行符 \n 之外的任何字符,加上 s 之后, . 中包含換行符 \n毒返。

三租幕、元字符

字符 描述
\ 將下一個(gè)字符標(biāo)記為一個(gè)特殊字符、或一個(gè)原義字符拧簸、或一個(gè) 向后引用劲绪、或一個(gè)八進(jìn)制轉(zhuǎn)義符。例如盆赤,'n' 匹配字符 "n"贾富。'\n' 匹配一個(gè)換行符。序列 '\' 匹配 "" 而 "(" 則匹配 "("牺六。
^ 匹配輸入字符串的開(kāi)始位置颤枪。如果設(shè)置了 RegExp 對(duì)象的 Multiline 屬性,^ 也匹配 '\n' 或 '\r' 之后的位置兔乞。
$ 匹配輸入字符串的結(jié)束位置汇鞭。如果設(shè)置了RegExp 對(duì)象的 Multiline 屬性凉唐,$ 也匹配 '\n' 或 '\r' 之前的位置。
* 匹配前面的子表達(dá)式零次或多次霍骄。例如台囱,zo* 能匹配 "z" 以及 "zoo"。* 等價(jià)于{0,}读整。
+ 匹配前面的子表達(dá)式一次或多次簿训。例如,'zo+' 能匹配 "zo" 以及 "zoo"米间,但不能匹配 "z"强品。+ 等價(jià)于 {1,}。
? 匹配前面的子表達(dá)式零次或一次屈糊。例如的榛,"do(es)?" 可以匹配 "do" 或 "does" 。? 等價(jià)于 {0,1}逻锐。
{n} n 是一個(gè)非負(fù)整數(shù)夫晌。匹配確定的 n 次。例如昧诱,'o{2}' 不能匹配 "Bob" 中的 'o'晓淀,但是能匹配 "food" 中的兩個(gè) o。
{n,} n 是一個(gè)非負(fù)整數(shù)盏档。至少匹配n 次凶掰。例如,'o{2,}' 不能匹配 "Bob" 中的 'o'蜈亩,但能匹配 "foooood" 中的所有 o懦窘。'o{1,}' 等價(jià)于 'o+'。'o{0,}' 則等價(jià)于 'o*'勺拣。
{n,m} m 和 n 均為非負(fù)整數(shù)奶赠,其中n <= m。最少匹配 n 次且最多匹配 m 次药有。例如毅戈,"o{1,3}" 將匹配 "fooooood" 中的前三個(gè) o。'o{0,1}' 等價(jià)于 'o?'愤惰。請(qǐng)注意在逗號(hào)和兩個(gè)數(shù)之間不能有空格苇经。
? 當(dāng)該字符緊跟在任何一個(gè)其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面時(shí),匹配模式是非貪婪的宦言。非貪婪模式盡可能少的匹配所搜索的字符串扇单,而默認(rèn)的貪婪模式則盡可能多的匹配所搜索的字符串。例如奠旺,對(duì)于字符串 "oooo"蜘澜,'o+?' 將匹配單個(gè) "o"施流,而 'o+' 將匹配所有 'o'。
. 匹配除換行符(\n鄙信、\r)之外的任何單個(gè)字符瞪醋。要匹配包括 '\n' 在內(nèi)的任何字符,請(qǐng)使用像"(.|\n)"的模式装诡。
(pattern) 匹配 pattern 并獲取這一匹配银受。所獲取的匹配可以從產(chǎn)生的 Matches 集合得到,在VBScript 中使用 SubMatches 集合鸦采,在JScript 中則使用 0…9 屬性宾巍。要匹配圓括號(hào)字符,請(qǐng)使用 '(' 或 ')'渔伯。
(?:pattern) 匹配 pattern 但不獲取匹配結(jié)果顶霞,也就是說(shuō)這是一個(gè)非獲取匹配,不進(jìn)行存儲(chǔ)供以后使用咱旱。這在使用 "或" 字符 (|) 來(lái)組合一個(gè)模式的各個(gè)部分是很有用确丢。例如绷耍, 'industr(?:y|ies) 就是一個(gè)比 'industry|industries' 更簡(jiǎn)略的表達(dá)式吐限。
(?=pattern) 正向肯定預(yù)查(look ahead positive assert),在任何匹配pattern的字符串開(kāi)始處匹配查找字符串褂始。這是一個(gè)非獲取匹配诸典,也就是說(shuō),該匹配不需要獲取供以后使用崎苗。例如狐粱,"Windows(?=95|98|NT|2000)"能匹配"Windows2000"中的"Windows",但不能匹配"Windows3.1"中的"Windows"胆数。預(yù)查不消耗字符肌蜻,也就是說(shuō),在一個(gè)匹配發(fā)生后必尼,在最后一次匹配之后立即開(kāi)始下一次匹配的搜索蒋搜,而不是從包含預(yù)查的字符之后開(kāi)始。
(?!pattern) 正向否定預(yù)查(negative assert)判莉,在任何不匹配pattern的字符串開(kāi)始處匹配查找字符串豆挽。這是一個(gè)非獲取匹配,也就是說(shuō)券盅,該匹配不需要獲取供以后使用帮哈。例如"Windows(?!95|98|NT|2000)"能匹配"Windows3.1"中的"Windows",但不能匹配"Windows2000"中的"Windows"锰镀。預(yù)查不消耗字符娘侍,也就是說(shuō)咖刃,在一個(gè)匹配發(fā)生后,在最后一次匹配之后立即開(kāi)始下一次匹配的搜索憾筏,而不是從包含預(yù)查的字符之后開(kāi)始僵缺。
(?<=pattern) 反向(look behind)肯定預(yù)查,與正向肯定預(yù)查類(lèi)似踩叭,只是方向相反磕潮。例如,"(?<=95|98|NT|2000)Windows"能匹配"2000Windows"中的"Windows"容贝,但不能匹配"3.1Windows"中的"Windows"自脯。
(?<!pattern) 反向否定預(yù)查,與正向否定預(yù)查類(lèi)似斤富,只是方向相反膏潮。例如"(?<!95|98|NT|2000)Windows"能匹配"3.1Windows"中的"Windows",但不能匹配"2000Windows"中的"Windows"满力。
x|y 匹配 x 或 y焕参。例如,'z|food' 能匹配 "z" 或 "food"油额。'(z|f)ood' 則匹配 "zood" 或 "food"叠纷。
[xyz] 字符集合。匹配所包含的任意一個(gè)字符潦嘶。例如涩嚣, '[abc]' 可以匹配 "plain" 中的 'a'。
[^xyz] 負(fù)值字符集合掂僵。匹配未包含的任意字符航厚。例如, '[^abc]' 可以匹配 "plain" 中的'p'锰蓬、'l'幔睬、'i'、'n'芹扭。
[a-z] 字符范圍麻顶。匹配指定范圍內(nèi)的任意字符。例如冯勉,'[a-z]' 可以匹配 'a' 到 'z' 范圍內(nèi)的任意小寫(xiě)字母字符澈蚌。
[^a-z] 負(fù)值字符范圍。匹配任何不在指定范圍內(nèi)的任意字符灼狰。例如宛瞄,'[^a-z]' 可以匹配任何不在 'a' 到 'z' 范圍內(nèi)的任意字符。
\b 匹配一個(gè)單詞邊界,也就是指單詞和空格間的位置份汗。例如盈电, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'杯活。
\B 匹配非單詞邊界匆帚。'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'旁钧。
\cx 匹配由 x 指明的控制字符吸重。例如, \cM 匹配一個(gè) Control-M 或回車(chē)符歪今。x 的值必須為 A-Z 或 a-z 之一嚎幸。否則,將 c 視為一個(gè)原義的 'c' 字符寄猩。
\d 匹配一個(gè)數(shù)字字符嫉晶。等價(jià)于 [0-9]。
\D 匹配一個(gè)非數(shù)字字符田篇。等價(jià)于 [^0-9]替废。
\f 匹配一個(gè)換頁(yè)符。等價(jià)于 \x0c 和 \cL泊柬。
\n 匹配一個(gè)換行符椎镣。等價(jià)于 \x0a 和 \cJ。
\r 匹配一個(gè)回車(chē)符彬呻。等價(jià)于 \x0d 和 \cM衣陶。
\s 匹配任何空白字符,包括空格闸氮、制表符、換頁(yè)符等等教沾。等價(jià)于 [ \f\n\r\t\v]蒲跨。
\S 匹配任何非空白字符。等價(jià)于 [^ \f\n\r\t\v]授翻。
\t 匹配一個(gè)制表符或悲。等價(jià)于 \x09 和 \cI。
\v 匹配一個(gè)垂直制表符堪唐。等價(jià)于 \x0b 和 \cK巡语。
\w 匹配字母、數(shù)字淮菠、下劃線(xiàn)男公。等價(jià)于'[A-Za-z0-9_]'。
\W 匹配非字母合陵、數(shù)字枢赔、下劃線(xiàn)澄阳。等價(jià)于 '[^A-Za-z0-9_]'。
\xn 匹配 n踏拜,其中 n 為十六進(jìn)制轉(zhuǎn)義值碎赢。十六進(jìn)制轉(zhuǎn)義值必須為確定的兩個(gè)數(shù)字長(zhǎng)。例如速梗,'\x41' 匹配 "A"肮塞。'\x041' 則等價(jià)于 '\x04' & "1"。正則表達(dá)式中可以使用 ASCII 編碼姻锁。
\num 匹配 num峦嗤,其中 num 是一個(gè)正整數(shù)。對(duì)所獲取的匹配的引用屋摔。例如烁设,'(.)\1' 匹配兩個(gè)連續(xù)的相同字符。
\n 標(biāo)識(shí)一個(gè)八進(jìn)制轉(zhuǎn)義值或一個(gè)向后引用钓试。如果 \n 之前至少 n 個(gè)獲取的子表達(dá)式装黑,則 n 為向后引用。否則弓熏,如果 n 為八進(jìn)制數(shù)字 (0-7)恋谭,則 n 為一個(gè)八進(jìn)制轉(zhuǎn)義值。
\nm 標(biāo)識(shí)一個(gè)八進(jìn)制轉(zhuǎn)義值或一個(gè)向后引用挽鞠。如果 \nm 之前至少有 nm 個(gè)獲得子表達(dá)式疚颊,則 nm 為向后引用。如果 \nm 之前至少有 n 個(gè)獲取信认,則 n 為一個(gè)后跟文字 m 的向后引用材义。如果前面的條件都不滿(mǎn)足,若 n 和 m 均為八進(jìn)制數(shù)字 (0-7)嫁赏,則 \nm 將匹配八進(jìn)制轉(zhuǎn)義值 nm其掂。
\nml 如果 n 為八進(jìn)制數(shù)字 (0-3),且 m 和 l 均為八進(jìn)制數(shù)字 (0-7)潦蝇,則匹配八進(jìn)制轉(zhuǎn)義值 nml款熬。
\un 匹配 n,其中 n 是一個(gè)用四個(gè)十六進(jìn)制數(shù)字表示的 Unicode 字符攘乒。例如贤牛, \u00A9 匹配版權(quán)符號(hào) (?)。

實(shí)例:

var str = "abcd test@runoob.com 1234";
var patt1 = /\b[\w.%+-]+@[\w.-]+\.[a-zA-Z]{2,6}\b/g;
document.write(str.match(patt1));

結(jié)果:
image-20210607151426346.png
img

四则酝、運(yùn)算符優(yōu)先級(jí)

正則表達(dá)式從左到右進(jìn)行計(jì)算殉簸,并遵循優(yōu)先級(jí)順序,這與算術(shù)表達(dá)式非常類(lèi)似。相同優(yōu)先級(jí)的從左到右進(jìn)行運(yùn)算喂链,不同優(yōu)先級(jí)的運(yùn)算先高后低返十。下表從最高到最低說(shuō)明了各種正則表達(dá)式運(yùn)算符的優(yōu)先級(jí)順序:

運(yùn)算符 描述
\ 轉(zhuǎn)義符
(), (?:), (?=), [] 圓括號(hào)和方括號(hào)
*, +, ?, {n}, {n,}, {n,m} 限定符
^, $, \任何元字符、任何字符 定位點(diǎn)和序列(即:位置和順序)
| 替換椭微,"或"操作 字符具有高于替換運(yùn)算符的優(yōu)先級(jí)洞坑,使得"m|food"匹配"m"或"food"。若要匹配"mood"或"food"蝇率,請(qǐng)使用括號(hào)創(chuàng)建子表達(dá)式迟杂,從而產(chǎn)生"(m|f)ood"。

五本慕、匹配規(guī)則

1.基本模式匹配

一切從最基本的開(kāi)始排拷。模式,是正則表達(dá)式最基本的元素锅尘,它們是一組描述字符串特征的字符监氢。模式可以很簡(jiǎn)單,由普通的字符串組成藤违,也可以非常復(fù)雜浪腐,往往用特殊的字符表示一個(gè)范圍內(nèi)的字符、重復(fù)出現(xiàn)顿乒,或表示上下文议街。例如^oncebucket$

2.字符簇

[a-z] //匹配所有的小寫(xiě)字母 
[A-Z] //匹配所有的大寫(xiě)字母 
[a-zA-Z] //匹配所有的字母 
[0-9] //匹配所有的數(shù)字 
[0-9\.\-] //匹配所有的數(shù)字璧榄,句號(hào)和減號(hào) 
[ \f\r\t\n] //匹配所有的白字符
^[a-z][0-9]$
[^a-z] //除了小寫(xiě)字母以外的所有字符 
[^\\\/\^] //除了(\)(/)(^)之外的所有字符 
[^\"\'] //除了雙引號(hào)(")和單引號(hào)(')之外的所有字符

特殊字符 .(點(diǎn)特漩,句號(hào))在正則表達(dá)式中用來(lái)表示除了"新行"之外的所有字符。所以模式 ^.5$ 與任何兩個(gè)字符的骨杂、以數(shù)字5結(jié)尾和以其他非"新行"字符開(kāi)頭的字符串匹配涂身。模式 . 可以匹配任何字符串,換行符(\n腊脱、\r)除外访得。

3.確定重復(fù)出現(xiàn)

跟在字符或字符簇后面的花括號(hào)({})用來(lái)確定前面的內(nèi)容的重復(fù)出現(xiàn)的次數(shù)。

字符簇 描述
^[a-zA-Z_]$ 所有的字母和下劃線(xiàn)
^[[:alpha:]]{3}$ 所有的3個(gè)字母的單詞
^a$ 字母a
^a{4}$ aaaa
^a{2,4}$ aa,aaa或aaaa
^a{1,3}$ a,aa或aaa
^a{2,}$ 包含多于兩個(gè)a的字符串
^a{2,} 如:aardvark和aaab陕凹,但apple不行
a{2,} 如:baad和aaa,但Nantucket不行
\t{2} 兩個(gè)制表符
.{2} 所有的兩個(gè)字符

這些例子描述了花括號(hào)的三種不同的用法鳄炉。一個(gè)數(shù)字 {x} 的意思是前面的字符或字符簇只出現(xiàn)x次 杜耙;一個(gè)數(shù)字加逗號(hào) {x,} 的意思是前面的內(nèi)容出現(xiàn)x或更多的次數(shù) ;兩個(gè)數(shù)字用逗號(hào)分隔的數(shù)字 {x,y} 表示 前面的內(nèi)容至少出現(xiàn)x次拂盯,但不超過(guò)y次佑女。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子团驱,更是在濱河造成了極大的恐慌摸吠,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嚎花,死亡現(xiàn)場(chǎng)離奇詭異寸痢,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)紊选,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)啼止,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人兵罢,你說(shuō)我怎么就攤上這事献烦。” “怎么了卖词?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵巩那,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我此蜈,道長(zhǎng)即横,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任舶替,我火速辦了婚禮令境,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘顾瞪。我一直安慰自己舔庶,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布陈醒。 她就那樣靜靜地躺著惕橙,像睡著了一般。 火紅的嫁衣襯著肌膚如雪钉跷。 梳的紋絲不亂的頭發(fā)上弥鹦,一...
    開(kāi)封第一講書(shū)人閱讀 49,036評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音爷辙,去河邊找鬼彬坏。 笑死,一個(gè)胖子當(dāng)著我的面吹牛膝晾,可吹牛的內(nèi)容都是我干的栓始。 我是一名探鬼主播,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼血当,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼幻赚!你這毒婦竟也來(lái)了禀忆?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤落恼,失蹤者是張志新(化名)和其女友劉穎箩退,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體佳谦,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡戴涝,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了吠昭。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片喊括。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖矢棚,靈堂內(nèi)的尸體忽然破棺而出郑什,到底是詐尸還是另有隱情,我是刑警寧澤蒲肋,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布蘑拯,位于F島的核電站,受9級(jí)特大地震影響兜粘,放射性物質(zhì)發(fā)生泄漏申窘。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一孔轴、第九天 我趴在偏房一處隱蔽的房頂上張望剃法。 院中可真熱鬧,春花似錦路鹰、人聲如沸贷洲。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)优构。三九已至,卻和暖如春雁竞,著一層夾襖步出監(jiān)牢的瞬間钦椭,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工碑诉, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留彪腔,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓进栽,卻偏偏與公主長(zhǎng)得像漫仆,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子泪幌,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容