摘要:許多程序設(shè)計語言都支持利用正則表達(dá)式進(jìn)行字符串操作。為字符串定義規(guī)則,為輸入內(nèi)容定義規(guī)則正則表達(dá)式用于字符串處理表單驗證等場合,實用高效。匹配檢查字符串是否符合正則表達(dá)式中的規(guī)則,有一次不匹配,則返回。
一、正則表達(dá)式的定義
正則表達(dá)式(Regular Expression,在代碼中常簡寫為regex、regexp或RE)是計算機(jī)科學(xué)的一個概念。正則表達(dá)式使用單個字符串來描述、匹配一系列符合某個句法規(guī)則的字符串。在很多文本編輯器里,正則表達(dá)式通常被用來檢索、替換那些符合某個模式的文本。許多程序設(shè)計語言都支持利用正則表達(dá)式進(jìn)行字符串操作。
在很多文本編輯器里,正則表達(dá)式通常被用來檢索、替換那些符合某個模式的文本。(為字符串定義規(guī)則,為輸入內(nèi)容定義規(guī)則!)
正則表達(dá)式用于字符串處理、表單驗證等場合,實用高效。
二、正則表達(dá)式聲明 1.通過構(gòu)造函數(shù)定義var 變量名= new RegExp(/表達(dá)式/);2.通過直接量定義 (較為常用)
var 變量名= /表達(dá)式/; console.log(regexp1.test(345)); console.log(/d/.test(567));(直接使用)3.test() 方法
正則對象方法,檢測測試字符串是否符合該規(guī)則,返回true和false,參數(shù)(測試字符串)
使用語法:Boolean = 表達(dá)式.test("要驗證的內(nèi)容"); console.log(/d/.test(567)); 驗證 567 符不符合 d 的規(guī)范三、正則五大內(nèi)部類(幫我們寫好的工具直接使用) 1.預(yù)定義類
[^ ] 除了換行和回車之外的任意字符(“”不行) d [0-9] 數(shù)字字符 D [^0-9] 非數(shù)字字符 s [ x0Bf ] 空白字符 S [^ x0Bf ] 非空白字符 w [a-zA-Z_0-9] 單詞字符 W [^a-zA-Z_0-9] 非單詞字符2.簡單類(正則://中什么特殊符號都不寫,和[]的加入) 1)/string/.test(“string”); 必須是完整的,只多不能少
/andy/.test(“andy”) // true /andy/.test(“andylv”) // true /andy/.test(“an”) // false 一句話,只要完整包含了andy 就可以了(有他就行)2)/[string]/.test(“string”); 只要包含里面的任何一個就可以
/[andy]/.test("andy"); // true /[andy]/.test("an"); // true /[andy]/.test("ady"); // true /[andy]/.test("anll"); // true /[andy]/.test("assd"); // true /[andy]/.test("ss"); // false /[3aH8]/.test("ss"); // false3.負(fù)向類(不能是其中的整體或者一部分)
中括號內(nèi),前面加個元字符^進(jìn)行取反,不是括號里面的字符(一部分也不行)。
(可以不夠,但是不能多)(不夠和正好,返回false;多了或者沒有返回true)
console.log(/[^abc]/.test("iiii"));//true console.log(/[^abc]/.test("aiiii"));//只有一部分睜一只眼閉一只眼true console.log(/[^abc]/.test("abc"));//剛好為false console.log(/[^abc]/.test("b"));//不夠為false console.log(/[^abc]/.test("bcdef"));//只有一部分睜一只眼閉一只眼true console.log(/[^abc]/.test("abcdef"));//只有一部分睜一只眼閉一只眼true 注意: 這個符號 ^ 一定是寫到方括號里面4.范圍類
有時匹配的東西過多,而且類型又相同,全部輸入太麻煩,我們可以在中間加了個橫線
console.log(/[a-c]/.test("dghhj")); //false console.log(/[a-c]/.test("b")); //true5.組合類
用中括號匹配不同類型的單個字符。 console.log(/[a-m1-5]/.test("b"))//true四、正則表達(dá)式的功能
正則表達(dá)式主要是針對字符串進(jìn)行操作,可以簡化對字符串的復(fù)雜操作,其主要功能有匹配、切割、替換、獲取。1、匹配
檢查字符串是否符合正則表達(dá)式中的規(guī)則,有一次不匹配,則返回false。如:
String str="abc"; String reg="[a-zA-Z]d?";//次表達(dá)式表示字符串的第一位只能是字母,第二位只能是數(shù)字或沒有 boolean flag=str.matches(reg);//返回結(jié)果為true2、切割
所謂切割,即是按一定的規(guī)則將字符串分割成多個子字符串,如:
String str="zhangsan,lishi,wangwu"; String reg=",";//表示以逗號作為切割符 String[] arr=str.split(reg);//返回結(jié)果為{“zhangsan”,"lisi","wangwu}3、替換
即將字符串中符合規(guī)則的字符替換成指定字符,如:
String str="sfhjhfh136hjasdf73466247fsjha8437482jfjsfh746376"; str.replaceAll("d{3,}","#");//表示將連續(xù)出現(xiàn)三個或三個以上的數(shù)字替換成“#”4、獲取
即獲取與規(guī)格相符的字符串,其步驟為:
①將正則表達(dá)式封裝成對象
②讓正則表達(dá)式和要操作的字符串相關(guān)聯(lián),獲得匹配器對象
③獲取正則匹配引擎
④通過引擎對符合規(guī)則的子串進(jìn)行操作:如
String str="ming tian jiu yao fang jia le"; String reg="[a-z]{3}";//"http://b"表示單詞邊界 Pattern p=Pattern.compile(reg); Matcher m=p.matcher(str);// 獲得匹配器 m.find();五、正則邊界(重點)
^ 會匹配行或者字符串的起始位置
注:^在[]中才表示非!這里表示開始
$ 會匹配行或字符串的結(jié)尾位置
^$在一起 表示必須是這個(精確匹配)
// 邊界可以精確說明要什么 console.log(/lily/.test("lilyname")); // true console.log(/^lily$/.test("lily")); // true console.log(/^lily$/.test("ly")); // false console.log(/^andy$/.test("andy")); // true 這個的最終意思就是 說, 必須是 andy 這四個字母六、量詞(重點)
(多個字母,重復(fù)最后一個) * (貪婪) 重復(fù)零次或更多 (>=0) + (懶惰) 重復(fù)一次或更多次 (>=1) ? (占有) 重復(fù)零次或一次 (0||1) 要么有 要么沒有 {} 重復(fù)多少次的意思 可以有多少個 您的銀行卡密碼只能是 6位 {6} {n} n次 (x=n) {n,} 重復(fù)n次或更多 (x>=n) {n,m} 重復(fù)出現(xiàn)的次數(shù)比n多但比m少 (n<=x<=m) * {0,} + {1,} ? {0,1} x|y 一個 | x 或者 y(沒有&,用的是,代替的) ()提高權(quán)限,有限計算七、replace 函數(shù)
replace() 方法用于在字符串中用一些字符替換另一些字符,或替換一個與正則表達(dá)式匹配的子串。 語法格式:(返回值是新字符串)
需要匹配的對象.replace(正則式/字符串,替換的目標(biāo)字符)
正則表達(dá)式的匹配模式支持的2個標(biāo)志
g:表示全局模式(global),即模式將被應(yīng)用于所有字符串而非發(fā)現(xiàn)一個而停止
i:表示不區(qū)分大小寫(ease-insensitive)模式,在確定匹配想時忽略模式與字符串的大小寫
封裝自己的trim 函數(shù) function trim(str) { return str.replace(/(^s+)|(s+$)/g,""); // 去掉前面和后面的空格 }八、常用的正則表達(dá)式 1、校驗數(shù)字的表達(dá)式
數(shù)字:^[0-9]*$ n位的數(shù)字:^d{n}$ 至少n位的數(shù)字:^d{n,}$ m-n位的數(shù)字:^d{m,n}$ 零和非零開頭的數(shù)字:^(0|[1-9][0-9]*)$ 非零開頭的最多帶兩位小數(shù)的數(shù)字:^([1-9][0-9]*)+(.[0-9]{1,2})?$ 帶1-2位小數(shù)的正數(shù)或負(fù)數(shù):^(-)?d+(.d{1,2})?$ 正數(shù)、負(fù)數(shù)、和小數(shù):^(-|+)?d+(.d+)?$ 有兩位小數(shù)的正實數(shù):^[0-9]+(.[0-9]{2})?$ 有1~3位小數(shù)的正實數(shù):^[0-9]+(.[0-9]{1,3})?$ 非零的正整數(shù):^[1-9]d$ 或 ^([1-9][0-9]){1,3}$ 或 ^+?[1-9][0-9]*$ 非零的負(fù)整數(shù):^-[1-9][]0-9”$ 或 ^-[1-9]d$ 非負(fù)整數(shù):^d+$ 或 ^[1-9]d*|0$ 非正整數(shù):^-[1-9]d*|0$ 或 ^((-d+)|(0+))$ 非負(fù)浮點數(shù):^d+(.d+)?$ 或 ^[1-9]d.d|0.d[1-9]d|0?.0+|0$ 非正浮點數(shù):^((-d+(.d+)?)|(0+(.0+)?))$ 或 ^(-([1-9]d.d|0.d[1-9]d))|0?.0+|0$ 正浮點數(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]))$ 負(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])))$ 浮點數(shù):^(-?d+)(.d+)?$ 或 ^-?([1-9]d.d|0.d[1-9]d|0?.0+|0)$2、校驗字符的表達(dá)式
漢字:^[u4e00-u9fa5]{0,}$ 英文和數(shù)字:^[A-Za-z0-9]+$ 或 ^[A-Za-z0-9]{4,40}$ 長度為3-20的所有字符:^.{3,20}$ 由26個英文字母組成的字符串:^[A-Za-z]+$ 由26個大寫英文字母組成的字符串:^[A-Z]+$ 由26個小寫英文字母組成的字符串:^[a-z]+$ 由數(shù)字和26個英文字母組成的字符串:^[A-Za-z0-9]+$ 由數(shù)字、26個英文字母或者下劃線組成的字符串:^w+$ 或 ^w{3,20}$ 中文、英文、數(shù)字包括下劃線:^[u4E00-u9FA5A-Za-z0-9_]+$ 中文、英文、數(shù)字但不包括下劃線等符號:^[u4E00-u9FA5A-Za-z0-9]+$ 或 ^[u4E00-u9FA5A-Za-z0-9]{2,20}$ 可以輸入含有^%&’,;=?$”等字符:[^%&’,;=?$x22]+ 禁止輸入含有~的字符:[^~x22]+3、特殊需求表達(dá)式
Email地址:^w+([-+.]w+)@w+([-.]w+).w+([-.]w+)*$ 域名:[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.? InternetURL:[a-zA-z]+://[^s] 或 ^http://([w-]+.)+[w-]+(/[w-./?%&=])?$ 手機(jī)號碼:^(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}$ 電話號碼(“XXX-XXXXXXX”、”XXXX-XXXXXXXX”、”XXX-XXXXXXX”、”XXX-XXXXXXXX”、”XXXXXXX”和”XXXXXXXX):^((d{3,4}-)|d{3.4}-)?d{7,8}$ 國內(nèi)電話號碼(0511-4405222、021-87888822):d{3}-d{8}|d{4}-d{7} 電話號碼正則表達(dá)式(支持手機(jī)號碼,3-4位區(qū)號,7-8位直播號碼,1-4位分機(jī)號): ((d{11})|^((d{7,8})|(d{4}|d{3})-(d{7,8})|(d{4}|d{3})-(d{7,8})-(d{4}|d{3}|d{2}|d{1})|(d{7,8})-(d{4}|d{3}|d{2}|d{1}))$) 身份證號(15位、18位數(shù)字),最后一位是校驗位,可能為數(shù)字或字符X:(^d{15}$)|(^d{18}$)|(^d{17}(d|X|x)$) 帳號是否合法(字母開頭,允許5-16字節(jié),允許字母數(shù)字下劃線):^[a-zA-Z][a-zA-Z0-9_]{4,15}$ 密碼(以字母開頭,長度在6~18之間,只能包含字母、數(shù)字和下劃線):^[a-zA-Z]w{5,17}$ 強(qiáng)密碼(必須包含大小寫字母和數(shù)字的組合,不能使用特殊字符,長度在8-10之間):^(?=.d)(?=.[a-z])(?=.*[A-Z]).{8,10}$ 日期格式:^d{4}-d{1,2}-d{1,2} 一年的12個月(01~09和1~12):^(0?[1-9]|1[0-2])$ 一個月的31天(01~09和1~31):^((0?[1-9])|((1|2)[0-9])|30|31)$ 錢的輸入格式: 有四種錢的表示形式我們可以接受:”10000.00” 和 “10,000.00”, 和沒有 “分” 的 “10000” 和 “10,000”:^[1-9][0-9]*$ 這表示任意一個不以0開頭的數(shù)字,但是,這也意味著一個字符”0”不通過,所以我們采用下面的形式:^(0|[1-9][0-9]*)$ 一個0或者一個不以0開頭的數(shù)字.我們還可以允許開頭有一個負(fù)號:^(0|-?[1-9][0-9]*)$ 這表示一個0或者一個可能為負(fù)的開頭不為0的數(shù)字.讓用戶以0開頭好了.把負(fù)號的也去掉,因為錢總不能是負(fù)的吧。下面我們要加的是說明可能的小數(shù)部分:^[0-9]+(.[0-9]+)?$ 必須說明的是,小數(shù)點后面至少應(yīng)該有1位數(shù),所以”10.”是不通過的,但是 “10” 和 “10.2” 是通過的:^[0-9]+(.[0-9]{2})?$ 這樣我們規(guī)定小數(shù)點后面必須有兩位,如果你認(rèn)為太苛刻了,可以這樣:^[0-9]+(.[0-9]{1,2})?$ 這樣就允許用戶只寫一位小數(shù).下面我們該考慮數(shù)字中的逗號了,我們可以這樣:^[0-9]{1,3}(,[0-9]{3})*(.[0-9]{1,2})?$ 1到3個數(shù)字,后面跟著任意個 逗號+3個數(shù)字,逗號成為可選,而不是必須:^([0-9]+|[0-9]{1,3}(,[0-9]{3})*)(.[0-9]{1,2})?$ 備注:這就是最終結(jié)果了,別忘了”+”可以用”*”替代如果你覺得空字符串也可以接受的話(奇怪,為什么?)最后,別忘了在用函數(shù)時去掉去掉那個反斜杠,一般的錯誤都在這里 xml文件:^([a-zA-Z]+-?)+[a-zA-Z0-9]+.[x|X][m|M][l|L]$ 中文字符的正則表達(dá)式:[u4e00-u9fa5] 雙字節(jié)字符:[^x00-xff] (包括漢字在內(nèi),可以用來計算字符串的長度(一個雙字節(jié)字符長度計2,ASCII字符計1)) 空白行的正則表達(dá)式: s* (可以用來刪除空白行) HTML標(biāo)記的正則表達(dá)式:<(S?)[^>]>.?|<.? /> ( 首尾空白字符的正則表達(dá)式:^s|s$或(^s)|(s$) (可以用來刪除行首行尾的空白字符(包括空格、制表符、換頁符等等),非常有用的表達(dá)式) 騰訊QQ號:[1-9][0-9]{4,} (騰訊QQ號從10000開始) 中國郵政編碼:[1-9]d{5}(?!d) (中國郵政編碼為6位數(shù)字) IP地址:((?:(?:25[0-5]|2[0-4]d|[01]?d?d).){3}(?:25[0-5]|2[0-4]d|[01]?d?d))
如果你覺得這篇文章對你有所幫助,那就順便點個贊吧,點贊收藏不迷路~
黑芝麻哇,白芝麻發(fā),黑芝麻白芝麻哇發(fā)哈!
前端哇發(fā)哈
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/106848.html
摘要:在中,通過棧的存取方式來管理執(zhí)行上下文,我們可稱其為執(zhí)行棧,或函數(shù)調(diào)用棧。因為執(zhí)行中最先進(jìn)入全局環(huán)境,所以處于棧底的永遠(yuǎn)是全局環(huán)境的執(zhí)行上下文。 一、什么是執(zhí)行上下文? 執(zhí)行上下文(Execution Context): 函數(shù)執(zhí)行前進(jìn)行的準(zhǔn)備工作(也稱執(zhí)行上下文環(huán)境) JavaScript在執(zhí)行一個代碼段之前,即解析(預(yù)處理)階段,會先進(jìn)行一些準(zhǔn)備工作,例如掃描JS中var定義的變量、...
摘要:在這次執(zhí)行期間,函數(shù)中的將指向。在剛剛的例子中,因為在調(diào)用構(gòu)造函數(shù)的過程中,手動的設(shè)置了返回對象,與綁定的默認(rèn)對象被丟棄了。在上面的例子中,一個賦值給了的函數(shù)稱為匿名函數(shù),返回了另一個箭頭函數(shù)稱為匿名函數(shù)。 一、引言 在執(zhí)行上下文的創(chuàng)建階段,會分別生成變量對象,建立作用域鏈,確定this指向。this的指向,是在函數(shù)被調(diào)用的時候確定的。也就是執(zhí)行上下文被創(chuàng)建時確定的。因此,一個函數(shù)中的...
摘要:由此可知閉包是函數(shù)的執(zhí)行環(huán)境以及執(zhí)行環(huán)境中的函數(shù)組合而構(gòu)成的。此時產(chǎn)生了閉包。二閉包的作用閉包的特點是讀取函數(shù)內(nèi)部局部變量,并將局部變量保存在內(nèi)存,延長其生命周期。三閉包的問題使用閉包會將局部變量保持在內(nèi)存中,所以會占用大量內(nèi)存,影響性能。 一、什么是閉包 1.閉包的定義 閉包是一種特殊的對象。它由兩部分構(gòu)成:函數(shù),以及創(chuàng)建該函數(shù)的環(huán)境(包含自由變量)。環(huán)境由閉包創(chuàng)建時在作用域中的任何...
摘要:腳本執(zhí)行,事件處理等。引擎線程,也稱為內(nèi)核,負(fù)責(zé)處理腳本程序,例如引擎。事件觸發(fā)線程,用來控制事件循環(huán)可以理解為,引擎線程自己都忙不過來,需要瀏覽器另開線程協(xié)助。異步請求線程,也就是發(fā)出請求后,接收響應(yīng)檢測狀態(tài)變更等都是這個線程管理的。 一、進(jìn)程與線程 現(xiàn)代操作系統(tǒng)比如Mac OS X,UNIX,Linux,Windows等,都是支持多任務(wù)的操作系統(tǒng)。 什么叫多任務(wù)呢?簡單地說,就是操...
摘要:全局作用域局部作用域局部作用域全局作用域局部作用域塊語句沒有塊級作用域塊級聲明包括和,以及和循環(huán),和函數(shù)不同,它們不會創(chuàng)建新的作用域。局部作用域只在該函數(shù)調(diào)用執(zhí)行期間存在。 一、什么是作用域? 作用域是你的代碼在運行時,各個變量、函數(shù)和對象的可訪問性。(可產(chǎn)生作用的區(qū)域) 二、JavaScript中的作用域 在 JavaScript 中有兩種作用域 全局作用域 局部作用域 當(dāng)變量定...
閱讀 4412·2021-11-19 09:59
閱讀 3329·2021-10-12 10:12
閱讀 2641·2021-09-22 15:25
閱讀 3336·2019-08-30 15:55
閱讀 1192·2019-08-29 11:27
閱讀 1472·2019-08-28 18:06
閱讀 2742·2019-08-26 13:41
閱讀 2562·2019-08-26 13:41