百度百科這樣解釋:
正則表達式,又稱規(guī)則表達式。(英語:Regular Expression,在代碼中常簡寫為regex、regexp或RE),計算機科學(xué)的一個概念。正則表通常被用來檢索、替換那些符合某個模式(規(guī)則)的文本。
正則表達式是對字符串(包括普通字符(例如,a 到 z 之間的字母)和特殊字符(稱為“元字符”))操作的一種邏輯公式,就是用事先定義好的一些特定字符、及這些特定字符的組合,組成一個“規(guī)則字符串”,這個“規(guī)則字符串”用來表達對字符串的一種過濾邏輯。正則表達式是一種文本模式,模式描述在搜索文本時要匹配的一個或多個字符串。
起源:
正則表達式的“鼻祖”或許可一直追溯到科學(xué)家對人類神經(jīng)系統(tǒng)工作原理的早期研究。
神經(jīng)算法:
邏輯性的思維是指根據(jù)邏輯規(guī)則進行的過程;它先將信息化成概念,并用符號表示,然后,根據(jù)符號運算按串行模式進行邏輯推理;這一過程可以寫成串行的指令,讓計算機執(zhí)行。然而,直觀性的思維是將分布式存儲的信息綜合起來,結(jié)果是忽然間產(chǎn)生想法或解決問題的辦法。這種思維方式的根本之點在于以下兩點:1.信息是通過神經(jīng)元上的興奮模式分布儲在網(wǎng)絡(luò)上;2.信息處理是通過神經(jīng)元之間同時相互作用的動態(tài)過程來完成的。
創(chuàng)建正則
1.直接量 /字面量
var reg = /規(guī)則/g; (g代表global多所有的進行檢查,沒有值查找第一個就結(jié)束)
2.對象方式
var reg2 = new RegExp('規(guī)則','g'); //創(chuàng)建一個正則對象
有關(guān)的方法
str.match(正則)
match() 方法可在字符串內(nèi)檢索指定的值,或找到一個或多個正則表達式的匹配。
返回值
存放匹配結(jié)果的數(shù)組。該數(shù)組的內(nèi)容依賴于 regexp 是否具有全局標(biāo)志 g。
正則.test(str)
test() 方法用于檢測一個字符串是否匹配某個模式.
返回值
檢測到就返回 true 否則返回false
元字符
詞邊界 所需單詞兩邊加 \b單詞\b \b單詞 以什么開始開始 單詞\b 結(jié)尾處
\u 漢字元字符 \d 代表的是數(shù)字 \d\d 匹配兩個數(shù)字連在一起的
\w 數(shù)字 字母 下劃線
\s 空白字符 包括空格 換行 \t (相當(dāng)于tab鍵)
\n 查找換行符的
. 查找所有字符 除了 換行符
\b 匹配單
量詞
n+ 一個或多個
n* 零個或多個 人一個
n? 一個或零個 最多一個
如果符合條件盡可能會向數(shù)量多的匹配
n{x} x個n
n{x,y} 匹配 x --- y 個 自私的原則
^x 以什么開頭 作為字符串開頭的x
x$ 以什么結(jié)束 作為字符串結(jié)尾的x
/^x.*y$/ 以x開始 以y結(jié)束的
[] 和()
[123] 打印 [1,2,3]; 匹配其中的任何一個
[^123] 除了匹配123以外的任意一個
[1-5] 1--5 一到5 之間的任意數(shù)字 [1-36-8] 1到3 或者 6到8
大小寫字母 [a-z] [A-Z]
()代表一個整體 一個整體 |代表或者 3或者5 小括號里面可以有中括號
特殊字符
找. 轉(zhuǎn)義字符 . 匹配特殊含義的字符 要用轉(zhuǎn)義字符 (+ - ? * [] {} () ^ $ ... )
常用的正則表達式:
一、校驗數(shù)字的表達式
1 數(shù)字:^[0-9]*$
2 n位的數(shù)字:^\d{n}$
3 至少n位的數(shù)字:^\d{n,}$
4 m-n位的數(shù)字:^\d{m,n}$
5 零和非零開頭的數(shù)字:^(0|[1-9][0-9])$
6 非零開頭的最多帶兩位小數(shù)的數(shù)字:^([1-9][0-9])+(.[0-9]{1,2})?$
7 帶1-2位小數(shù)的正數(shù)或負(fù)數(shù):^(-)?\d+(.\d{1,2})?$
8 正數(shù)、負(fù)數(shù)、和小數(shù):^(-|+)?\d+(.\d+)?$
9 有兩位小數(shù)的正實數(shù):^[0-9]+(.[0-9]{2})?$
10 有1~3位小數(shù)的正實數(shù):^[0-9]+(.[0-9]{1,3})?$
11 非零的正整數(shù):^[1-9]\d$ 或 ^([1-9][0-9]){1,3}$ 或 ^+?[1-9][0-9]$
12 非零的負(fù)整數(shù):^-[1-9][]0-9"$ 或 ^-[1-9]\d$
13 非負(fù)整數(shù):^\d+$ 或 ^[1-9]\d|0$
14 非正整數(shù):^-[1-9]\d|0$ 或 ^((-\d+)|(0+))$
15 非負(fù)浮點數(shù):^\d+(.\d+)?$ 或 ^[1-9]\d.\d|0.\d[1-9]\d|0?.0+|0$
16 非正浮點數(shù):^((-\d+(.\d+)?)|(0+(.0+)?))$ 或 ^(-([1-9]\d.\d|0.\d[1-9]\d))|0?.0+|0$
17 正浮點數(shù):^[1-9]\d.\d|0.\d[1-9]\d$ 或 ^(([0-9]+.[0-9][1-9][0-9])|([0-9][1-9][0-9].[0-9]+)|([0-9][1-9][0-9]))$
18 負(fù)浮點數(shù):^-([1-9]\d.\d|0.\d[1-9]\d)$ 或 ^(-(([0-9]+.[0-9][1-9][0-9])|([0-9][1-9][0-9].[0-9]+)|([0-9][1-9][0-9])))$
19 浮點數(shù):^(-?\d+)(.\d+)?$ 或 ^-?([1-9]\d.\d|0.\d[1-9]\d|0?.0+|0)$
二、校驗字符的表達式
1 漢字:^[\u4e00-\u9fa5]{0,}$
2 英文和數(shù)字:^[A-Za-z0-9]+$ 或 ^[A-Za-z0-9]{4,40}$
3 長度為3-20的所有字符:^.{3,20}$
4 由26個英文字母組成的字符串:^[A-Za-z]+$
5 由26個大寫英文字母組成的字符串:^[A-Z]+$
6 由26個小寫英文字母組成的字符串:^[a-z]+$
7 由數(shù)字和26個英文字母組成的字符串:^[A-Za-z0-9]+$
8 由數(shù)字、26個英文字母或者下劃線組成的字符串:^\w+$ 或 ^\w{3,20}$
9 中文、英文、數(shù)字包括下劃線:^[\u4E00-\u9FA5A-Za-z0-9_]+$
10 中文、英文、數(shù)字但不包括下劃線等符號:^[\u4E00-\u9FA5A-Za-z0-9]+$ 或 ^[\u4E00-\u9FA5A-Za-z0-9]{2,20}$
11 可以輸入含有%&',;=?$"等字符:[%&',;=?$\x22]+
12 禁止輸入含有的字符:[^\x22]+
三、特殊需求表達式
1 Email地址:^\w+([-+.]\w+)@\w+([-.]\w+).\w+([-.]\w+)$
2 域名:[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?
3 InternetURL:[a-zA-z]+://[^\s]* 或 ^http://([\w-]+.)+[\w-]+(/[\w-./?%&=])?$
4 手機號碼:^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$
5 電話號碼("XXX-XXXXXXX"、"XXXX-XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX):^((\d{3,4}-)|\d{3.4}-)?\d{7,8}$
6 國內(nèi)電話號碼(0511-4405222、021-87888822):\d{3}-\d{8}|\d{4}-\d{7}
7 身份證號(15位、18位數(shù)字):^\d{15}|\d{18}$
8 短身份證號碼(數(shù)字、字母x結(jié)尾):^([0-9]){7,18}(x|X)?$ 或 ^\d{8,18}|[0-9x]{8,18}|[0-9X]{8,18}?$
9 帳號是否合法(字母開頭,允許5-16字節(jié),允許字母數(shù)字下劃線):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
10 密碼(以字母開頭,長度在6~18之間,只能包含字母、數(shù)字和下劃線):^[a-zA-Z]\w{5,17}$
11 強密碼(必須包含大小寫字母和數(shù)字的組合,不能使用特殊字符,長度在8-10之間):^(?=.\d)(?=.[a-z])(?=.[A-Z]).{8,10}$
12 日期格式:^\d{4}-\d{1,2}-\d{1,2}
13 一年的12個月(01~09和1~12):^(0?[1-9]|1[0-2])$
14 一個月的31天(01~09和1~31):^((0?[1-9])|((1|2)[0-9])|30|31)$
15 錢的輸入格式:
16 1.有四種錢的表示形式我們可以接受:"10000.00" 和 "10,000.00", 和沒有 "分" 的 "10000" 和 "10,000":^[1-9][0-9]$
17 2.這表示任意一個不以0開頭的數(shù)字,但是,這也意味著一個字符"0"不通過,所以我們采用下面的形式:^(0|[1-9][0-9])$
18 3.一個0或者一個不以0開頭的數(shù)字.我們還可以允許開頭有一個負(fù)號:^(0|-?[1-9][0-9])$
19 4.這表示一個0或者一個可能為負(fù)的開頭不為0的數(shù)字.讓用戶以0開頭好了.把負(fù)號的也去掉,因為錢總不能是負(fù)的吧.下面我們要加的是說明可能的小數(shù)部分:^[0-9]+(.[0-9]+)?$
20 5.必須說明的是,小數(shù)點后面至少應(yīng)該有1位數(shù),所以"10."是不通過的,但是 "10" 和 "10.2" 是通過的:^[0-9]+(.[0-9]{2})?$
21 6.這樣我們規(guī)定小數(shù)點后面必須有兩位,如果你認(rèn)為太苛刻了,可以這樣:^[0-9]+(.[0-9]{1,2})?$
22 7.這樣就允許用戶只寫一位小數(shù).下面我們該考慮數(shù)字中的逗號了,我們可以這樣:^[0-9]{1,3}(,[0-9]{3})(.[0-9]{1,2})?$
23 8.1到3個數(shù)字,后面跟著任意個 逗號+3個數(shù)字,逗號成為可選,而不是必須:^([0-9]+|[0-9]{1,3}(,[0-9]{3}))(.[0-9]{1,2})?$
24 備注:這就是最終結(jié)果了,別忘了"+"可以用""替代如果你覺得空字符串也可以接受的話(奇怪,為什么?)最后,別忘了在用函數(shù)時去掉去掉那個反斜杠,一般的錯誤都在這里
25 xml文件:^([a-zA-Z]+-?)+[a-zA-Z0-9]+\.[x|X][m|M][l|L]$
26 中文字符的正則表達式:[\u4e00-\u9fa5]
27 雙字節(jié)字符:[^\x00-\xff] (包括漢字在內(nèi),可以用來計算字符串的長度(一個雙字節(jié)字符長度計2,ASCII字符計1))
28 空白行的正則表達式:\n\s\r (可以用來刪除空白行)
29 HTML標(biāo)記的正則表達式:<(\S?)[^>]>.?</\1>|<.? /> (網(wǎng)上流傳的版本太糟糕,上面這個也僅僅能部分,對于復(fù)雜的嵌套標(biāo)記依舊無能為力)
30 首尾空白字符的正則表達式:^\s|\s$或(^\s)|(\s*$) (可以用來刪除行首行尾的空白字符(包括空格、制表符、換頁符等等),非常有用的表達式)
31 騰訊QQ號:[1-9][0-9]{4,} (騰訊QQ號從10000開始)
32 中國郵政編碼:[1-9]\d{5}(?!\d) (中國郵政編碼為6位數(shù)字) 33 IP地址:\d+.\d+.\d+.\d+ (提取IP地址時有用) 34 IP地址:((?:(?:25[0-5]|2[0-4]\d|[01]?\d?\d)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d?\d))
匹配頁面所有A標(biāo)簽正則:
<a.+?href="(.+?)".>(.+)</a>
這個只能匹配不換行的A。一換行就完蛋。換這個試試:<a[>]+?href="(["]+)"[^>]>([^<]+)</a>
繼續(xù)添加改進版本:可以匹配href后面跟 單引號,雙引號或者不跟符號的情況:
<a[>]+?href=["']?(["']+)["']?[>]*>([<]+)</a>
匹配頁面所有Img標(biāo)簽正則:
<img(.*?)>