【小白筆記】js正則表達式

一、匹配符

\:指出接著的字符為特殊字符。

^:表示匹配的字符必須在最前邊。

$:表示匹配的字符必須在最后邊。

*:匹配*前面的字符0次或n次。

+:匹配+前面的字符1次或n次。

?:匹配?前面的字符0次或1次。

.:匹配除換行符外的所有單個的字符。

(x):匹配“x”并記錄匹配的值。匹配子串能被結(jié)果數(shù)組中的素[1],...,[n]返回,或被RegExp對象的屬性$1...$9返回。

x|y:匹配“x”或者“y”。

{n}:這里n是一個正整數(shù)。匹配前面的n個字符。

{n,}:這里n是一個正整數(shù)。匹配至少n個前面的字符。

{n,m}:這里n是一個正整數(shù)。匹配至少n個最多m個前面的字符。

[xyz]:字符列表,匹配列出的任意字符。可以通過連字符“-”指出一個字符范圍。

[^xyz]:字符補集,匹配除了列出的字符外的所有東西??梢允褂眠B字符“-”指出一個字符范圍。

[\b]:匹配一個空格(與“\b”不同)。

\b:匹配一個單詞的分界線,如一個空格(與“[\b]”不同)。

\B:匹配一個單詞的非分界線。

\cX:X是一個控制字符。匹配一個字符串的控制字符。

\d:匹配一個數(shù)字,等價于“[0-9]”。

\D:匹配任何的非數(shù)字,等價于“/[^0-9]/”。

\f:匹配一個表單符。

\n:匹配一個換行符。

\r:匹配一個回車符。

\s:匹配一個單個white空格符,包括空格、tab、form feed、換行符,等價于“[\f\n\r\t\v]”。

\S:匹配一個制表符。

\t:匹配一個制表符。

\v:匹配一個頂頭制表符。

\w:匹配所有的數(shù)字和字母以及下劃線,等價于“/[A-Za-z0-9_]/”。

\W:匹配除數(shù)字、字母以及下劃線外的其他字符,等價于“/[^$A-Za-z0-9_]/”。


二、創(chuàng)建RegExp

1、顯示構(gòu)造:new RegExp("pattern"[,"flags"]);

2、隱式構(gòu)造:/pattern/[flags];

pattern:必填項,正則表達式模式;

flags:可選項,包括g、i、m。

1)g:全局標(biāo)志。設(shè)置后,對文本執(zhí)行搜索和替換時,對文本中所有匹配的部分起作用;未設(shè)置時,只搜索和替換最早匹配的內(nèi)容。

2)i:忽略大小標(biāo)志。設(shè)置后,匹配比較時,忽略大小寫。

3)m:多行標(biāo)志。設(shè)置后,“^”可與被搜索字符串中的“\n”或“\r”之后的位置(即下一行的行首)相匹配,“^”也可與被搜索字符串中的“\n”或“\r”之后的位置(即下一行的行尾)相匹配;未設(shè)置時,“^”只與被搜索字符串的開始位置相匹配,“$”也只與被搜索字符串的結(jié)束位置相匹配。


三、使用方法

rgExp:包含正則表達式模式和可用標(biāo)志的正則表達式對象。

stringObj:要在其上進行查找的String對象或字符串文字。

str:要在其上進行查找的String對象或字符串文字。

1、rgExp.exec(str):如果未找到匹配,則返回null;如果找到匹配,則返回一個數(shù)組。若設(shè)置了全局標(biāo)志,則以lastIndex的值指示的位置開始查找;若未設(shè)置全局標(biāo)志,則從字符串的起始位置開始搜索。返回的數(shù)組包括input、index和lastIndex三個屬性。input屬性包含了整個被查找的字符串;index屬性中包含了整個被查找字符串中被匹配的子字符串的位置;lastIndex屬性中包含了匹配中最后一個字符的下一個位置。

2、rgExp.test(str):檢查在字符串中是否存在相應(yīng)的匹配。如果存在則返回true,否則返回false。

3、stringObj.match(rgExp):(與rgExp.exec(str)類似)如果未找到匹配,則返回null;如果找到匹配,則返回一個數(shù)組。返回的數(shù)組包括input、index和lastIndex三個屬性。input屬性包含了整個被查找的字符串;index屬性中包含了整個被查找字符串中被匹配的子字符串的位置;lastIndex屬性中包含了匹配中最后一個字符的下一個位置。

4、stringObj.search(rgExp):檢查在字符串中是否存在相應(yīng)的匹配。如果存在,則返回一個整數(shù)值,指明這個匹配距離字符串開始的偏移位置;如果沒有,則返回-1。

5、relpace(rgExp.replaceText):rgExp為字符串時,不按正則表達式的方式進行模糊搜索,而進行精確搜索。replaceText為用于替換搜索到的內(nèi)容的字符串,可以使用特殊的字符組合來表示匹配變量。其中,“$&”是整個表達式模式在被搜索字符串中所匹配的字符串;“$”是表達式模式在被搜索字符串中所匹配的字符串左邊的所有內(nèi)容;“$'”是表達式模式在被搜索字符串中所匹配的字符串右邊的所有內(nèi)容;“$$”則是普通意義的“$”字符。$1…$9分別是第1個到第9個子匹配所捕獲到的內(nèi)容,$01…$99分別是第1個到第99個子匹配所捕獲到的內(nèi)容,當(dāng)$n和$nn(n為正整數(shù))在表達式中沒有對應(yīng)的子匹配時,被解釋成普通字符。

eg.字符串替換

var str = "aa12bb34cc56";

var ex = /(\d)(\d)/gi;

var str1 = str.replace(ex,"$2$1");

console.log(str1); //輸出結(jié)果:aa21bb43cc65

6、split([separator[,limit]]):separator為分割標(biāo)志符參數(shù),可也為多個字符或一個正則表達式;limit為限制返回元素的個數(shù)。

eg.字符串分割

var arr = new Array();

var str = "How、are、you、!";

var ex = /、/;

arr = str.split(ex);

console.log(arr[i]);?//輸出結(jié)果:["How", "are", "you", "!"]


四、實際應(yīng)用【轉(zhuǎn)載來源】(有改動)

a.校驗數(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ù)或負數(shù):^(\-)?\d+(\.\d{1,2})?$

8、正數(shù)、負數(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、非零的負整數(shù):^\-[1-9][]0-9"*$ 或 ^-[1-9]\d*$

13、非負整數(shù):^\d+$ 或 ^[1-9]\d*|0$

14、非正整數(shù):^-[1-9]\d*|0$ 或 ^((-\d+)|(0+))$

15、非負浮點數(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、負浮點數(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)$

b.校驗字符的表達式

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]+

c.特殊需求表達式

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、有四種錢的表示形式我們可以接受:"10000.00" 和 "10,000.00",和沒有 "分" 的 "10000" 和 "10,000":^[1-9][0-9]*$

17、這表示任意一個不以0開頭的數(shù)字,但是,這也意味著一個字符"0"不通過,所以我們采用下面的形式:^(0|[1-9][0-9]*)$

18、一個0或者一個不以0開頭的數(shù)字.我們還可以允許開頭有一個負號:^(0|-?[1-9][0-9]*)$

19、這表示一個0或者一個可能為負的開頭不為0的數(shù)字.讓用戶以0開頭好了.把負號的也去掉,因為錢總不能是負的吧.下面我們要加的是說明可能的小數(shù)部分:^[0-9]+(.[0-9]+)?$

20、必須說明的是,小數(shù)點后面至少應(yīng)該有1位數(shù),所以"10."是不通過的,但是 "10" 和 "10.2" 是通過的:^[0-9]+(.[0-9]{2})?$

21、這樣我們規(guī)定小數(shù)點后面必須有兩位,如果你認為太苛刻了,可以這樣:^[0-9]+(.[0-9]{1,2})?$

22、這樣就允許用戶只寫一位小數(shù)下面我們該考慮數(shù)字中的逗號了,我們可以這樣:^[0-9]{1,3}(,[0-9]{3})*(.[0-9]{1,2})?$

23、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)記的正則表達式:<(.*)>.*</1>|<(.*)/>

30、首尾空白字符的正則表達式:(^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))

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,983評論 6 537
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,772評論 3 422
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 176,947評論 0 381
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,201評論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 71,960評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,350評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,406評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,549評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,104評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,914評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,089評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,647評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,340評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,753評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,007評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,834評論 3 395
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 48,106評論 2 375

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

  • 文章轉(zhuǎn)載地址: http://www.open-open.com/code/view/1430625516632 ...
    得起一個清新脫俗的名字閱讀 2,187評論 1 3
  • 忘了從哪收集的資料了,放這兒,以備不時之需。 只能輸入數(shù)字:"^[0-9]*$"。 只能輸入n位的數(shù)字:"^\d{...
    study_monkey閱讀 1,419評論 0 7
  • 一、校驗數(shù)字的表達式 二、校驗字符的表達式 三、特殊需求表達式 一.網(wǎng)絡(luò)驗證應(yīng)用技巧 驗證 E-mail格式 驗證...
    丶legend閱讀 1,382評論 0 22
  • 正則表達式到底是什么東西?字符是計算機軟件處理文字時最基本的單位,可能是字母,數(shù)字,標(biāo)點符號,空格,換行符,漢字等...
    獅子挽歌閱讀 2,161評論 0 9
  • Java的正則表達式講解:(為了能看清,本文正則表達式用中文的句號代替英文句點) 英文句點符號:匹配單個任意字符。...
    紅姑娘閱讀 4,378評論 0 2