正規表示式全集

字元 描述
\ 將下一個字元標記為一個特殊字元(File Format Escape,清單見本表)、或一個原義字元(Identity Escape,有^$()*+?.[\{|共計12個)、或一個向後參照(backreferences)、或一個八進位跳脫符。例如,「n」符合字元「n」。「\n」符合一個換行符。序列「\\」符合「\」而「\(」則符合「(」。
^ 符合輸入字串的開始位置。如果設定了RegExp物件的Multiline屬性,^也符合「\n」或「\r」之後的位置。
$ 符合輸入字串的結束位置。如果設定了RegExp物件的Multiline屬性,$也符合「\n」或「\r」之前的位置。
* 符合前面的子表達式零次或多次。例如,zo*能符合「z」、「zo」以及「zoo」。*等價於{0,}。
+ 符合前面的子表達式一次或多次。例如,「zo+」能符合「zo」以及「zoo」,但不能符合「z」。+等價於{1,}。
? 符合前面的子表達式零次或一次。例如,「do(es)?」可以符合「does」中的「do」和「does」。?等價於{0,1}。
{n} n是一個非負整數。符合確定的n次。例如,「o{2}」不能符合「Bob」中的「o」,但是能符合「food」中的兩個o。
{n,} n是一個非負整數。至少符合n次。例如,「o{2,}」不能符合「Bob」中的「o」,但能符合「foooood」中的所有o。「o{1,}」等價於「o+」。「o{0,}」則等價於「o*」。
{n,m} mn均為非負整數,其中n<=m。最少符合n次且最多符合m次。例如,「o{1,3}」將符合「fooooood」中的前三個o。「o{0,1}」等價於「o?」。請注意在逗號和兩個數之間不能有空格。
? 非貪心量化(Non-greedy quantifiers):當該字元緊跟在任何一個其他重複修飾詞(*,+,?,{n},{n,},{n,m})後面時,符合模式是貪婪的。非貪婪模式儘可能少的符合所搜尋的字串,而預設的貪婪模式則儘可能多的符合所搜尋的字串。例如,對於字串「oooo」,「o+?」將符合單個「o」,而「o+」將符合所有「o」。
. 符合除「\r」「\n」之外的任何單個字元。要符合包括「\r」「\n」在內的任何字元,請使用像「(.|\r|\n)」的模式。
(pattern) 符合pattern並取得這一符合的子字串。該子字串用於向後參照。所取得的符合可以從產生的Matches集合得到,在VBScript中使用SubMatches集合,在JScript中則使用$0…$9屬性。要符合圓括號字元,請使用「\(」或「\)」。可帶數量字尾。
(?:pattern) 符合pattern但不取得符合的子字串(shy groups),也就是說這是一個非取得符合,不儲存符合的子字串用於向後參照。這在使用或字元「(|)」來組合一個模式的各個部分是很有用。例如「industr(?:y|ies)」就是一個比「industry|industries」更簡略的表達式。
(?=pattern) 正向肯定預查(look ahead positive assert),在任何符合pattern的字串開始處符合尋找字串。這是一個非取得符合,也就是說,該符合不需要取得供以後使用。例如,「Windows(?=95|98|NT|2000)」能符合「Windows2000」中的「Windows」,但不能符合「Windows3.1」中的「Windows」。預查不消耗字元,也就是說,在一個符合發生後,在最後一次符合之後立即開始下一次符合的搜尋,而不是從包含預查的字元之後開始。
(?!pattern) 正向否定預查(negative assert),在任何不符合pattern的字串開始處符合尋找字串。這是一個非取得符合,也就是說,該符合不需要取得供以後使用。例如「Windows(?!95|98|NT|2000)」能符合「Windows3.1」中的「Windows」,但不能符合「Windows2000」中的「Windows」。預查不消耗字元,也就是說,在一個符合發生後,在最後一次符合之後立即開始下一次符合的搜尋,而不是從包含預查的字元之後開始
(?<=pattern) 反向(look behind)肯定預查,與正向肯定預查類似,只是方向相反。例如,「(?<=95|98|NT|2000)Windows」能符合「2000Windows」中的「Windows」,但不能符合「3.1Windows」中的「Windows」。
(?<!pattern) 反向否定預查,與正向否定預查類似,只是方向相反。例如「(?<!95|98|NT|2000)Windows」能符合「3.1Windows」中的「Windows」,但不能符合「2000Windows」中的「Windows」。
x|y 沒有包圍在()里,其範圍是整個正規表示式。例如,「z|food」能符合「z」或「food」。「(?:z|f)ood」則符合「zood」或「food」。
[xyz] 字元集合(character class)。符合所包含的任意一個字元。例如,「[abc]」可以符合「plain」中的「a」。特殊字元僅有反斜線\保持特殊含義,用於跳脫字元。其它特殊字元如星號、加號、各種括號等均作為普通字元。脫字元^如果出現在首位則表示負值字元集合;如果出現在字串中間就僅作為普通字元。連字元 - 如果出現在字串中間表示字元範圍描述;如果如果出現在首位(或末尾)則僅作為普通字元。右方括號應跳脫出現,也可以作為首位字元出現。
[^xyz] 排除型字元集合(negated character classes)。符合未列出的任意字元。例如,「[^abc]」可以符合「plain」中的「plin」。
[a-z] 字元範圍。符合指定範圍內的任意字元。例如,「[a-z]」可以符合「a」到「z」範圍內的任意小寫字母字元。
[^a-z] 排除型的字元範圍。符合任何不在指定範圍內的任意字元。例如,「[^a-z]」可以符合任何不在「a」到「z」範圍內的任意字元。
[:name:] 增加命名字元類(named character class[註 1]中的字元到表達式。只能用於方括號表達式
[=elt=] 增加當前locale下排序(collate)等價於字元「elt」的元素。例如,[=a=]可能會增加ä、á、à、ă、ắ、ằ、ẵ、ẳ、â、ấ、ầ、ẫ、ẩ、ǎ、å、ǻ、ä、ǟ、ã、ȧ、ǡ、ą、ā、ả、ȁ、ȃ、ạ、ặ、ậ、ḁ、ⱥ、ᶏ、ɐ、ɑ 。只能用於方括號表達式。
[.elt.] 增加排序元素collation elementelt到表達式中。這是因為某些排序元素由多個字元組成。例如,29個字母表的西班牙語, "CH"作為單個字母排在字母C之後,因此會產生如此排序「cinco, credo, chispa」。只能用於方括號表達式。
\b 符合一個單詞邊界,也就是指單詞和空格間的位置。例如,「er\b」可以符合「never」中的「er」,但不能符合「verb」中的「er」。
\B 符合非單詞邊界。「er\B」能符合「verb」中的「er」,但不能符合「never」中的「er」。
\cx 符合由x指明的控制字元。x的值必須為A-Za-z之一。否則,將c視為一個原義的「c」字元。控制字元的值等於x的值最低5位元(即對3210進位的餘數)。例如,\cM符合一個Control-M或回車字元。\ca等效於\u0001, \cb等效於\u0002, 等等…
\d 符合一個數字字元。等價於[0-9]。注意Unicode正規表示式會符合全形數字字元。
\D 符合一個非數字字元。等價於[^0-9]。
\f 符合一個換頁符。等價於\x0c和\cL。
\n 符合一個換行符。等價於\x0a和\cJ。
\r 符合一個回車字元。等價於\x0d和\cM。
\s 符合任何空白字元,包括空格、制表符、換頁符等等。等價於[ \f\n\r\t\v]。注意Unicode正規表示式會符合全形空格符。
\S 符合任何非空白字元。等價於[^ \f\n\r\t\v]。
\t 符合一個制表符。等價於\x09和\cI。
\v 符合一個垂直制表符。等價於\x0b和\cK。
\w 符合包括底線的任何單詞字元。等價於「[A-Za-z0-9_]」。注意Unicode正規表示式會符合中文字元。
\W 符合任何非單詞字元。等價於「[^A-Za-z0-9_]」。
\xnn 十六進位跳脫字元序列。符合兩個十六進位數字nn表示的字元。例如,「\x41」符合「A」。「\x041」則等價於「\x04&1」。正規表達式中可以使用ASCII編碼。.
\num 向後參照(back-reference)一個子字串(substring),該子字串與正規表示式的第num個用括號圍起來的捕捉群(capture group)子表達式(subexpression)符合。其中num是從1開始的十進位正整數,其上限可能是9[註 2]、31[註 3]、99甚至無限[註 4]。例如:「(.)\1」符合兩個連續的相同字元。
\n 標識一個八進位跳脫值或一個向後參照。如果\n之前至少n個取得的子表達式,則n為向後參照。否則,如果n為八進位數字(0-7),則n為一個八進位跳脫值。
\nm 3位八進位數字,標識一個八進位跳脫值或一個向後參照。如果\nm之前至少有nm個獲得子表達式,則nm為向後參照。如果\nm之前至少有n個取得,則n為一個後跟文字m的向後參照。如果前面的條件都不滿足,若nm均為八進位數字(0-7),則\nm將符合八進位跳脫值nm
\nml 如果n為八進位數字(0-3),且m和l均為八進位數字(0-7),則符合八進位跳脫值nml。
\un Unicode跳脫字元序列。其中n是一個用四個十六進位數字表示的Unicode字元。例如,\u00A9符合著作權符號(©)。

常用正規表示式

使用者名稱

/^[a-z0-9_-]{3,16}$/

密碼

/^[a-z0-9_-]{6,18}$/

十六進位值

/^#?([a-f0-9]{6}|[a-f0-9]{3})$/

電子郵件

/^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/
/^[a-z\d]+(\.[a-z\d]+)*@([\da-z](-[\da-z])?)+(\.{1,2}[a-z] +)+$/

URL

/^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*) *\/?$/

IPv4 位址

/((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5 ]|[01]?\d\d?)/

IPv6位址

/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}( ?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/

HTML 標籤

/^<([a-z]+)([^<]+)*(?:>(.*)<\/\1>|\s+\/>)$/

刪除程式碼\註釋

(?<!http:|\S)//.*$

Unicode編碼中的漢字範圍

/^[\u2E80-\u9FFF]+$/

驗證郵件地址

/[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=? ^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a -z0-9](?:[a-z0-9-]*[a-z0-9])?/g

驗證密碼

  • 至少8位
  • 必須包含至少1個大寫字母,1個小寫字母和1個數字
  • 可包含特殊字符
/[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=? ^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a -z0-9](?:[a-z0-9-]*[a-z0-9])?/g

如下符合:Testing193!

匹配所有非ASCII字符

/[^\x00-\x7F]+\ *(?:[^\x00-\x7F]| )*/g

如下匹配:

前に來た時は北側からで、當時の光景はいまでも思い出せる。 Even now I remember the scene I saw approaching the city from the north.  青竜山脈から流れる川が湖へと流れこむぬ、湖が湖へと流れこむレのんでいて、川沿いには金色 の大聖堂

驗證IPv4位址0.0.0.0 - 255.255.255.255

/\b(?:(?:2(?:[0-4][0-9]|5[0-5])|[0-1]?[0-9]?[0-9]) \.){3}(?:(?:2([0-4][0-9]|5[0-5])|[0-1]?[0-9]?[0-9] ))\b/ig

如下匹配: 0.0.0.0 ,0.0.x.0, 1.2.3.4 ,8.8.8.8 ,123.123.123.123 ,123.123.123.256 (<- don't2 match as ". , 255.255.255.255

驗證字串為16進位字串

/#?([\da-fA-F]{2})([\da-fA-F]{2})([\da-fA-F]{2})/g

如下匹配: HEX code with numbers in it: #F0F0F0 HEX code with letters only: #FAFAFA Works without a # in front of the code: FFF000

移除js註釋

/\/\*[\s\S]*?\*\/|\/\/.*/g

如下匹配: var sample = 0; var new = 1; var my_string = "Hello World!"; // This is a comment! function do_stuff(){ alert(my_string);//another comment }