一醋界、語(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 屬性脊框,則 字符本身养盗,請(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è)字符串
非貪婪:如果您只需要匹配開(kāi)始和結(jié)束 h1 標(biāo)簽环鲤,下面的非貪婪表達(dá)式只匹配 <h1>。
/<.*?>/
或者 /<\w+?/
:只匹配到第一個(gè)<h1>
通過(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。
-
(?<=exp2)exp1:查找 exp2 后面的 exp1妨马。
-
exp1(?!exp2):查找后面不是 exp2 的 exp1挺举。
-
(?<!exp2)exp1:查找前面不是 exp2 的 exp1。
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昧捷。 |
i
和g
是比較常用的闲昭,都比較熟悉,就不多說(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'
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 中則使用 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é)果:四则酝、運(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)顿乒,或表示上下文议街。例如^once
、bucket$
等
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次佑女。