特殊字符
若要匹配這些特殊字符之一瘤袖,必須首先轉義字符衣摩,即,在字符前面加反斜杠字符 \
捂敌。 例如艾扮,若要搜索“+”文本字符,可使用表達式\+
占婉。
元字符 | 行為 |
---|---|
* | 零次或多次匹配前面的字符或子表達式泡嘴。等效于 {0,}。 |
+ | 一次或多次匹配前面的字符或子表達式逆济。等效于 {1,}酌予。 |
? | 零次或一次匹配前面的字符或子表達式磺箕。等效于 {0,1}。 |
^ | 匹配搜索字符串開始的位置抛虫。 |
^ | 如果標志中包括 m(多行搜索)字符松靡,^ 還將匹配 \n 或 \r 后面的位置。 |
^ | 如果將 ^ 用作括號表達式中的第一個字符莱褒,則會對字符集求反击困。 |
$ | 匹配搜索字符串結尾的位置。 如果標志中包括 m(多行搜索)字符广凸,$ 還將匹配 \n 或 \r 前面的位置阅茶。 |
. | 匹配除換行符 \n 之外的任何單個字符。 若要匹配包括 \n 在內的任意字符谅海,請使用諸如 [\s\S] 之類的模式脸哀。 |
[] | 標記括號表達式的開始和結尾。 |
{} | 標記限定符表達式的開始和結尾扭吁。 |
() | 標記子表達式的開始和結尾撞蜂。 可以保存子表達式以備將來之用。 |
“豎線” | 指示在兩個或多個項之間進行選擇侥袜。 |
/ | 表示 JScript 中的文本正則表達式模式的開始或結尾蝌诡。 在第二個“/”后添加單字符標志可以指定搜索行為。 |
\ | 將下一字符標記為特殊字符枫吧、文本浦旱、反向引用或八進制轉義符。 |
** 大多數(shù)特殊字符在括號表達式內出現(xiàn)時失去它們的意義九杂,并表示普通字符颁湖。**
元字符
元字符 | 行為 |
---|---|
\b | 與一個字邊界匹配;即字與空格間的位置例隆。 |
\B | 非邊界字匹配甥捺。 |
\d | 數(shù)字字符匹配。等效于 [0-9]镀层。 |
\D | 非數(shù)字字符匹配镰禾。等效于 [^0-9]。 |
\w | 與以下任意字符匹配:A-Z鹿响、a-z羡微、0-9 和下劃線。等效于 [A-Za-z0-9_]惶我。 |
\W | 與除 A-Z、a-z博投、0-9 和下劃線以外的任意字符匹配绸贡。等效于 [^A-Za-z0-9_]。 |
[xyz] | 字符集。 與任何一個指定字符匹配听怕。 |
[a-z] | 字符范圍捧挺。 匹配指定范圍內的任何字符。 |
[^a-z] | 反向字符范圍尿瞭。 與不在指定范圍內的任何字符匹配闽烙。 |
{n} | 正好匹配 n 次。 n 是非負整數(shù)声搁。 |
{n,} | 至少匹配 n 次黑竞。 n 是非負整數(shù)。* 與 {0,} 相等疏旨。+ 與 {1,} 相等很魂。 |
{n,m} | 匹配至少 n 次,至多 m 次檐涝。 n 和 m 是非負整數(shù)遏匆,其中 n <= m。 逗號和數(shù)字之間不能有空格谁榜。? 與 {0,1} 相等幅聘。 |
(pattern) | 與pattern 匹配并保存匹配項。 您可以從由 JScript 中的 exec Method返回的數(shù)組元素中檢索保存的匹配項窃植。 若要匹配括號字符 ( )帝蒿,請使用\( 或者\) 。 |
(?:pattern) | 與pattern 匹配撕瞧,但不保存匹配項陵叽;即不會存儲匹配項以備將來之用。 這對于用“or”字符 (豎線) 組合模式部件的情況很有用丛版。 |
(?=pattern) | 正預測先行巩掺。 找到一個匹配項后,將在匹配文本之前開始搜索下一個匹配項页畦。 不會保存匹配項以備將來之用胖替。 |
(?!pattern) | 負預測先行。 匹配與pattern 不匹配的搜索字符串豫缨。 找到一個匹配項后独令,將在匹配文本之前開始搜索下一個匹配項。 不會保存匹配項以備將來之用好芭。 |
\cx | 匹配 x 指示的控制字符燃箭。 x 的值必須在 A-Z 或 a-z 范圍內。 如果不是這樣舍败,則假定 c 就是文本“c”字符本身招狸。 |
\xn | 匹配 n敬拓,此處的 n 是一個十六進制轉義碼。 十六進制轉義碼必須正好是兩位數(shù)長裙戏。 允許在正則表達式中使用 ASCII 代碼乘凸。 |
\num | 匹配 num,此處的 num 是一個正整數(shù)累榜。 這是對已保存的匹配項的引用营勤。 |
\n | 標識一個八進制轉義碼或反向引用。 如果 \n 前面至少有 n 個捕獲子表達式壹罚,那么 n 是反向引用葛作。 否則,如果 n 是八進制數(shù) (0-7)渔嚷,那么 n 是八進制轉義碼进鸠。 |
\nm | 標識一個八進制轉義碼或反向引用。 如果 \nm 前面至少有 nm 個捕獲子表達式形病,那么 nm 是反向引用客年。 如果 \nm 前面至少有 n 個捕獲子表達式,則 n 是反向引用漠吻,后面跟有文本 m量瓜。 如果上述情況都不存在,當 n 和 m 是八進制數(shù)字 (0-7) 時途乃,\nm 匹配八進制轉義碼 nm绍傲。 |
\nml | 當 n 是八進制數(shù)字 (0-3),m 和 l 是八進制數(shù)字 (0-7) 時耍共,匹配八進制轉義碼 nml烫饼。 |
\un | 匹配 n,其中 n 是以四位十六進制數(shù)表示的 Unicode 字符试读。 |
-
^(?=.*\d).{4,8}$
對密碼應用以下限制:其長度必須介于 4 到 8 個字符之間杠纵,并且必須至少包含一個數(shù)字。
在該模式中钩骇,.*\d
查找后跟有數(shù)字的任意多個字符比藻。 對于搜索字符串“abc3qr”,這與“abc3”匹配倘屹。 -
\b(?!th)\w+\b
與不以“th”開頭的單詞匹配银亲。
在該模式中,\b
與一個字邊界匹配纽匙。 對于搜索字符串“ quick ”务蝠,這與第一個空格匹配;(?!th)
與非“th”字符串匹配烛缔; 這與“qu”匹配请梢;從該匹配項開始赠尾,\w+
與一個字匹配力穗。 這與“quick”匹配毅弧。 -
\cM
與 Ctrl+M 或一個回車符匹配。 -
\x41
與“A”匹配当窗。\x041
等效于后跟有“1”的\x04
(因為 n 必須正好是兩位數(shù))够坐。 -
(.)\1
與兩個連續(xù)的相同字符匹配。 -
(\d)\1
與兩個連續(xù)的相同數(shù)字匹配崖面。 -
\11
與制表符匹配元咙。 -
\011
與制表符匹配。 -
\u00A9
與版權符號 (?) 匹配巫员。
非打印字符
下表包含表示非打印字符的轉義序列庶香。
字符 | 匹配 | 等效于 |
---|---|---|
\f | 換頁符。 |
\x0c 和 \cL
|
\n | 換行符简识。 |
\x0a 和 \cJ
|
\r | 回車符赶掖。 |
\x0d 和 \cM
|
\s | 任何空白字符。 其中包括空格七扰、制表符和換頁符奢赂。 | [ \f\n\r\t\v] |
\S | 任何非空白字符。 | [^ \f\n\r\t\v] |
\t | Tab 字符颈走。 |
\x09 和 \cI
|
\v | 垂直制表符膳灶。 |
\x0b 和\cK
|
優(yōu)先級順序
正則表達式的計算方式與算術表達式非常類似;即從左到右進行計算立由,并遵循優(yōu)先級順序轧钓。
下表按從高到低的順序包含了正則表達式運算符的優(yōu)先級順序。
運算符 | 說明 |
---|---|
\ | 轉義符 |
(), (?:), (?=), [] | 括號和中括號 |
*锐膜、+毕箍、?、{n}枣耀、{n,}霉晕、{n,m} | 限定符 |
^、$捞奕、\任何元字符 | 定位點和序列 |
豎線 | 替換 |
字符具有高于替換運算符的優(yōu)先級牺堰,例如,允許“m | food”匹配“m”或“food”颅围。 |
簡單表達式
搜索字符串中匹配器本身的單個普通字符伟葫。
var pattern = /a/; // 匹配a
var pattern = /a7M/; // 匹配a7M
// 沒有串聯(lián)運算符。只須在一個字符后面鍵入另一個字符院促。
字符匹配
句點 (.) 匹配字符串中的各種打印或非打印字符筏养,只有一個字符例外斧抱。這個例外就是換行符 (\n)。
// 匹配 aac渐溶、abc辉浦、acc、adc 等等茎辐,以及 a1c宪郊、a2c、a-c 和 a#c:
var pattern = /a.c/;
// 若要匹配包含文件名的字符串.
// 而句點 (.) 是輸入字符串的組成部分拖陆,句點前面加反斜扛 (\) 字符弛槐。
// 匹配 filename.ext
var pattern = /filename\.ext/;
中括號表達式
匹配列表中的特定字符組.
當字符括在中括號內時,該列表稱為"中括號表達式"依啰。普通字符在中括號內表示其本身乎串,即,它在輸入文本中匹配一次其本身速警。大多數(shù)特殊字符在中括號表達式內出現(xiàn)時失去它們的意義叹誉。不過也有一些例外,如:
- 如果
]
字符不是第一項坏瞄,它結束一個列表桂对。若要匹配列表中的]
字符,請將它放在第一位鸠匀,緊跟在開始[
后面蕉斜。 -
\
字符繼續(xù)作為轉義符。若要匹配\
字符缀棍,請使用\\
宅此。
// 以下正則表達式匹配 Chapter 1、Chapter 2爬范、Chapter 3父腕、Chapter 4 和 Chapter 5:
var pattern = /Chapter [12345]/;
//指定范圍時,開始值和結束值兩者都包括在范圍內(按 Unicode 排序順序青瀑,開始值必須在結束值的前面)璧亮。
var pattern = /Chapter [1-5]/;
// 取反 ^
/Chapter [^12345]/
/Chapter [^1-5]/
// 使用括號來組合 Chapter 和 Section
// 匹配 Chapter 1 或 Section 3
/^(Chapter|Section) [1-9][0-9]{0,1}$/
// 下面的修改提供相同的能力而不保存子匹配項:
/^(?:Chapter|Section) [1-9][0-9]{0,1}$/
簡單示例
// 一個單詞連續(xù)出現(xiàn)的位置。
var pattern = /\b([a-z]+) \1\b/gi;
"asd asd sasd asdawe asd sdfwe asd asd asda dfasd asd asd sdf asd".match(pattern);
// ["asd asd", "asd asd"]
// 將一個URL解析為協(xié)議斥难、域勘高、端口及相對路徑框全。
var pattern = /(\w+):\/\/([^/:]+)(:\d*)?([^# ]*)/;
"http://www.runoob.com/regexp/regexp-example.html".match(pattern);
// ["http://www.runoob.com/regexp/regexp-example.html", "http", "www.runoob.com", undefined, "/regexp/regexp-example.html", index: 0, input: "http://www.runoob.com/regexp/regexp-example.html"]
// 可匹配chapter柳譬,而不能匹配terminal透葛。
var pattern = /ter\b/; // \b 匹配一個單詞邊界
// 可匹配chapter,而不能匹配aptitude。
var pattern = /\Bapt/; // \B 匹配非單詞邊界
// 可匹配Windows95或Windows98或WindowsNT竞阐,當找到一個匹配后缴饭,從Windows后面開始進行下一次的檢索匹配。
var pattern = /Windows(?=95 |98 |NT )/;
// 匹配空行
var pattern = /^\s*$/;
// 驗證由兩位數(shù)字骆莹、一個連字符再加 5 位數(shù)字組成的 ID 號颗搂。
var pattern = /\d{2}-\d{5}/;
// 匹配 HTML 標記。
var pattern = /<\s*(\S+)(\s[^>]*)?>[\s\S]*<\s*\/\1\s*>/
// 匹配一個字符串汪疮,其中字符串中要包含字符串ABC或123峭火,同時字符串的長度不能小于10個長度。
var pattern = /^(?=.*(ABC|123)).{10,}$/;
pattern.test("123456ABC4") ;
- 網(wǎng)址(URL)
[a-zA-z]+://[^\s]*
- IP地址(IP Address)
((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)
- 電子郵件(Email)
\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
- QQ號碼
[1-9]\d{4,}
- HTML標記(包含內容或自閉合)
<(.*)(.*)>.*<\/\1>|<(.*) \/>
- 密碼(由數(shù)字/大寫字母/小寫字母/標點符號組成智嚷,四種都必有,8位以上)
(?=^.{8,}$)(?=.*\d)(?=.*\W+)(?=.*[A-Z])(?=.*[a-z])(?!.*\n).*$
- 日期(年-月-日)
(\d{4}|\d{2})-((1[0-2])|(0?[1-9]))-(([12][0-9])|(3[01])|(0?[1-9]))
- 日期(月/日/年)
((1[0-2])|(0?[1-9]))/(([12][0-9])|(3[01])|(0?[1-9]))/(\d{4}|\d{2})
- 時間(小時:分鐘, 24小時制)
((1|0?)[0-9]|2[0-3]):([0-5][0-9])
- 中文字符
/^[\u4E00-\u9FA5]+$/
匹配雙字節(jié)字符(包括漢子在內)[^\x00-\xff]
,可以用來計算字符串的長度(一個雙字節(jié)字符長度計2纺且,ASCII字符計1) - 中文及全角標點符號(字符)
[\u3000-\u301e\ufe10-\ufe19\ufe30-\ufe44\ufe50-\ufe6b\uff01-\uffee]
- 中國大陸固定電話號碼
(\d{4}-|\d{3}-)?(\d{8}|\d{7})
- 中國大陸手機號碼
/^0?1[35784][0-9][0-9]{8}$/
- 中國大陸郵政編碼
[1-9]\d{5}
- 中國大陸身份證號(15位或18位)
/(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/
- 非負整數(shù)(正整數(shù)或零)
\d+
- 正整數(shù)
[0-9]*[1-9][0-9]*
- 負整數(shù)
-[0-9]*[1-9][0-9]*
- 整數(shù)
-?\d+
- 小數(shù)
(-?\d+)(\.\d+)?
- 不包含abc的單詞
\b((?!abc)\w)+\b
- 不能純數(shù)字
/^\d+$/g
- URL解析為協(xié)議盏道、域、端口及相對路徑
var pattern = /(\w+):\/\/([^/:]+)(:\d*)?([^# ]*)/;
"http://www.runoob.com/regexp/regexp-example.html".match(pattern);
// ["http://www.runoob.com/regexp/regexp-example.html", "http", "www.runoob.com", undefined, "/regexp/regexp-example.html", index: 0, input: "http://www.runoob.com/regexp/regexp-example.html"]
- email
\b([a-zA-Z0-9%_.+\-]+)@([a-zA-Z0-9.\-]+?\.[a-zA-Z]{2,6})\b
- Hostname
\b(?:[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}?[a-zA-Z0-9]\.)+[a-zA-Z]{2,6}\b
- IP
\b(?:\d{1,3}\.){3}\d{1,3}\b
- 匹配首尾空白字符的正則表達式:
^\s*|\s*$