摘要:以指定模式分割字符串,返回結(jié)果為數(shù)組。為什么牢記,有什么用看代碼查找連續(xù)的相同的數(shù)字或者內(nèi)容是用子表達(dá)式只有字表達(dá)是中匹配的內(nèi)容才保存到緩存,這種行為叫捕獲。
前言
正則表達(dá)式之所以強(qiáng)大,是因?yàn)槠淠軐?shí)現(xiàn)模糊匹配,精確匹配沒(méi)有任何價(jià)值。
正則表達(dá)式學(xué)習(xí)筆記 第一章 JavaScript原型對(duì)象與原型鏈 1.1 正則表達(dá)式概念RegExp:是正則表達(dá)式(regular expression)的簡(jiǎn)寫,RegExp描述了一種字符串匹配的模式,可以用來(lái)檢查一個(gè)字符串是含有某種子串,將匹配的子串做替換或者從某個(gè)串中取出來(lái)符合某個(gè)條件的子串等。
1.2 正則表達(dá)式的用處數(shù)據(jù)隱藏,數(shù)據(jù)采集(爬蟲(chóng)),數(shù)據(jù)過(guò)濾,數(shù)據(jù)驗(yàn)證(表單驗(yàn)證,手機(jī)號(hào)碼,郵箱地址等),解析、格式檢查等。
正則的定義格式也很簡(jiǎn)單:
var t="ahmatbekjappar"; var reg=/j/; console.log(reg.test(t));//判斷我們查找字符是否存在,存在返回true第二章 標(biāo)準(zhǔn)庫(kù)中的正則對(duì)象 2.1 創(chuàng)建正則對(duì)象
創(chuàng)建正則對(duì)象的方法有兩種:實(shí)際開(kāi)發(fā)中一般都采用字面量創(chuàng)建方法
1.字面量創(chuàng)建法:以斜杠表示開(kāi)始和結(jié)束;2.構(gòu)造函數(shù)生成對(duì)象:通過(guò)實(shí)例化得到對(duì)象;
var t="ahmatbekjappar"; var reg1=/j/;//方式1 var reg2=new RegExp("j");//方式2 console.log(reg1.test(t)); console.log(reg2.test(t));
區(qū)別:
相同點(diǎn):效果完全一樣,也就是等價(jià)的2.2 匹配模式不同點(diǎn):第一種方法是編譯時(shí)新建正則表達(dá)式,第二種方法在運(yùn)行時(shí)新建正則表達(dá)式,也就是創(chuàng)建時(shí)機(jī)不一樣。
正則表達(dá)式是匹配模式,要么匹配字符,要么匹配位置
匹配模式指的是修飾符,表示正則匹配的附加規(guī)則,放在正則模式的最后面(尾部)。修飾符可以單個(gè)使用,也可以是多個(gè)一起用。
格式:var reg=/正則表達(dá)式/匹配模式;
在正則表達(dá)式中,匹配模式常用的兩種形式:g和i
g:global縮寫,代表全局匹配,匹配出所有滿足條件的結(jié)果,不加g的話第一次匹配成功后正則對(duì)象就停止繼續(xù)匹配。i:ignore縮寫,代表忽略大小寫,正則匹配時(shí)默認(rèn)區(qū)分大小寫,加了i就自動(dòng)忽略字符串大小寫
var t="AklmanAhmatbeK"; var reg1=/akl/; var reg2="akl/i; console.log(reg1.test(t));//false console.log(reg1.test(t));//true2.3 正則對(duì)象的方法
對(duì)象.test(str):判斷字符串是否具有指定模式的子串,返回結(jié)果是一個(gè)布爾值;
對(duì)象.exec(str):返回字符串指定模式的子串,一次只能獲取一個(gè)與匹配的結(jié)果;
2.4 String對(duì)象的方法
search(reg):與indexOf非常相似,返回指定模式的子串在字符串首次穿線的位置。
match(reg):以數(shù)組的形式返回指定模式的字符串,可以返回所有匹配的結(jié)果。
replace(reg,"將替換的字符"):把指定模式的子串進(jìn)行替換操作。
split(reg):以指定模式分割字符串,返回結(jié)果為數(shù)組。
第三章 要牢記住的概念
子表達(dá)式:在正則表達(dá)式中,通過(guò)一對(duì)圓括號(hào)起來(lái)的內(nèi)容,被稱之為“子表達(dá)式”;var reg=/d(d)d/gi;
捕獲:在正則表達(dá)式中,子表達(dá)式匹配到相應(yīng)的內(nèi)容時(shí),系統(tǒng)會(huì)自動(dòng)捕獲這個(gè)行為,然后將子表達(dá)式匹配到的內(nèi)容放入系統(tǒng)的緩存中,這過(guò)程就是“捕獲”。
反向引用:在正則表達(dá)式中,可以使用n(n>0,正整數(shù),代表系統(tǒng)中的緩存區(qū)編號(hào))來(lái)獲取緩沖區(qū)中的內(nèi)容,這個(gè)過(guò)程就是“反向引用”。
為什么牢記,有什么用?看代碼:查找連續(xù)的相同的數(shù)字或者內(nèi)容是用
第四章 正則表達(dá)式應(yīng)用 4.1 正則表達(dá)式的組成正則表達(dá)式是由普通字符(例如字符a到z)以及特殊字符(成為元字符)組成的文字模式。正則表達(dá)式作為一個(gè)模板,將某個(gè)字符模式與所搜索的字符串進(jìn)行匹配。正則表達(dá)式三步走:1.查什么?2.查多少?3.從哪查?
4.2 匹配符(查什么)匹配符:字符匹配符用于匹配某個(gè)或某些字符;例如d就是匹配0-9的數(shù)字。
在正則表達(dá)式中,通過(guò)一對(duì)中括號(hào)起來(lái)的內(nèi)容,稱之為"字符簇"。字符簇代表的是一個(gè)范圍,但是匹配時(shí),只能匹配某個(gè)范圍中的固定的結(jié)果。
字符簇 | 含義 |
---|---|
[a-z] | 匹配字符a到字符z之間的任一字符 |
[A-Z] | 匹配字符A到字符Z之間的任一字符 |
[0-9] | 匹配數(shù)字0到9之間的任一數(shù)字 |
[0-9a-z] | 匹配數(shù)字0到9或者字符a到z之間的任一字符 |
[0-9a-zA-Z] | 匹配數(shù)字0到9或字符a到字符z之或者字符A到字符Z之間的任一字符 |
[abcd] | 匹配字符a或者字符b或者字符c或者字符d |
[1234] | 匹配字符1或者字符2或者字符3或者字符4 |
在字符簇中,通過(guò)一個(gè)^(脫字符)來(lái)表示取反的含義:
字符簇 | 含義 |
---|---|
1 | 匹配除字符a到字符z之外的任一字符 |
2 | 匹配除字符a,b,c,d外的字符 |
3 | 匹配除數(shù)字0到9之外的任一字符 |
常用的比較特殊的匹配符:
字符簇 | 含義 |
---|---|
d | 匹配一個(gè)數(shù)字字符,與使用[0-9]等價(jià) |
D | 匹配一個(gè)非數(shù)字字符,還可以使用[脫字符0-9] |
w | 匹配包括下劃線的任何字母數(shù)字下劃線字符,還可以使用[0-9a-zA-Z] |
W | 匹配任何非字母數(shù)字下劃線字符,還可以[脫字符w] |
s | 匹配任何空白字符 |
S | 匹配任何非空白字符,還可以使用[脫字符s] |
.(是個(gè)點(diǎn)) | 匹配除"n"之外的任何單個(gè)字符 |
[u4e00-u9fa5] | 匹配中文字符中的任一字符 |
限定符可以指定正則表達(dá)式的一個(gè)給定字符必須要出現(xiàn)多少次才能滿足匹配。
字符簇 | 含義 |
---|---|
* | 匹配前面的子表達(dá)式零次或多次,0到多 |
+ | 匹配前面的子表達(dá)式一次或多次,1到多 |
? | 匹配前面的子表達(dá)式零次或一次,0或1 |
{n} | 匹配確定的 n 次 |
{n,} | 至少匹配n 次 |
{n,m} | 最少匹配 n 次且最多匹配 m 次 |
對(duì)qq號(hào)碼進(jìn)行校驗(yàn)要求5-10位,不能以0開(kāi)頭,只能是數(shù)字
var str="我的QQ20869921366666666666,nsd你的是6726832618嗎?"; // var reg=/d{3,7}/; var reg=/[1-9]d{4,10}/g;//正則表達(dá)式默認(rèn)情況下使用貪婪模式,在滿足條件的前提下盡量多的查找匹配 console.log(str.match(reg)); var reg1=/[1-9]d{4,10}?/;//非貪婪模式,惰性模式:在滿足條件的前提下,盡量的少查找匹配 console.log(str.match(reg1)); //?跟在表達(dá)式后面是限定符{0,1} //?跟在限定符后面,使用惰性模式(非貪婪模式) var reg2=/[1-9]d??/; //reg2和reg3是一個(gè)意思 var reg3=/[1-9]d{0,1}?/; console.log(str.match(reg2)); console.log(str.match(reg3));
正則表達(dá)式中默認(rèn)情況下能匹配多就不會(huì)匹配少,這種匹配模式就是貪婪模式(貪婪匹配)。
如果想少匹配或者限定的位數(shù)匹配則使用非貪婪模式,也就是優(yōu)先匹配滿足條件情況下的優(yōu)先匹配少的,這種非貪婪模式也被稱為惰性匹配。
4.4 定位符(從哪查)正則表達(dá)式只會(huì)到字符串去尋找是否有與之匹配的內(nèi)容,如果有就默認(rèn)是正確的,就不會(huì)考慮其字符串本身是否 合法的。因此必須使用定位符來(lái)將一個(gè)正則表達(dá)式固定在一行的開(kāi)始或者結(jié)束;也可以創(chuàng)建只在單詞內(nèi)或者只在單詞的開(kāi)始或結(jié)尾處出現(xiàn)的正則表達(dá)式。
字符簇 | 含義 |
---|---|
^ | 匹配輸入字符串的開(kāi)始位置 |
$ | 匹配輸入字符串的結(jié)束位置 |
b | 匹配一個(gè)單詞邊界 |
B | 匹配非單詞邊界 |
注意:脫字符放在字符簇中是取反的意思,放在整個(gè)表達(dá)式中是開(kāi)始位置的。
問(wèn)題1:用正則表達(dá)式,匹配字符串"lsd15309873475"中的的手機(jī)號(hào)
/**分析 *手機(jī)號(hào)第一位必須是1,第二位必須是3-8之間的數(shù)字,第三位到第十一位是只要0-9之間的數(shù)字即可 **/ var str="lsd15309873475"; var reg1=/1[345678]d{9}/; console.log(str.match(reg1));//給5分 var reg2=/^1[34578]d{9}$/; console.log(str.match(reg2));//給滿分
問(wèn)題2:
var str = "i am zhangsan"; //an必須是一個(gè)完整的單詞 var reg = /an/; console.log(str.match(reg)); //an不能是單詞的開(kāi)始,只能是單詞的結(jié)束 var reg1 = /Ban/; console.log(str.match(reg1));4.5 轉(zhuǎn)義字符
因?yàn)樵谡齽t表達(dá)式中 .(點(diǎn)) + 等是屬于表達(dá)式的一部分,但是我們?cè)谄ヅ鋾r(shí),字符串中也需要匹配
這些特殊字符,所以,我們必須使用 反斜杠 對(duì)某些特殊字符進(jìn)行轉(zhuǎn)義;
需要轉(zhuǎn)義的字符 | |
---|---|
點(diǎn). | |
小括號(hào)() | |
中括號(hào)[] | |
左斜杠/ | |
右斜杠 | |
選擇匹配符 |
問(wèn)題1:匹配一個(gè)合法的網(wǎng)址URL:
var str="http://aklman.com"; //對(duì)于. /都必須轉(zhuǎn)義匹配 var reg=/w+://w+.w+/; console.log(str.match(reg));//http://aklman.com
問(wèn)題2:使用正則表達(dá)式驗(yàn)證郵箱是否合法
var str="ak@aklman.com"; var reg=/w+@[0-9a-z]+(.[0-9a-z]{2,6})+/; console.log(str.match(reg));4.6 或者的用法
查找所有的蘋果產(chǎn)品:
var s="ipad ipod iphone imac itouch iamshuai"; var reg=/i(pad|pod|phone|mac|touch)/g; console.log(s.match(reg));4.7 預(yù)查 4.7.1 正向預(yù)查,正預(yù)測(cè),前瞻,先行斷言
問(wèn)題1:請(qǐng)把ing結(jié)尾的單詞的詞根部分(即不含ing部分)找出來(lái):
var str="sorry,when i am working,do not calling me!"; //只是為了找到ing結(jié)尾的單詞,但并不是詞根部分 var reg1=/w+ing/g;//["working", "calling"] var reg2=/w+(?=ing)/g;//["work", "call"] console.log(str.match(reg1)); console.log(str.match(reg2));4.7.2 負(fù)向預(yù)查,負(fù)預(yù)測(cè),前瞻,先行否言
問(wèn)題2:把不是ing結(jié)尾的單詞找出來(lái)
var str="sorry,when i am working,do not calling me!"; var reg=/w+(?!ing)w{3}/g;//負(fù)向預(yù)查、負(fù)預(yù)測(cè)、前瞻 console.log(str.match(reg));//["sorry", "when"]補(bǔ)充知識(shí)點(diǎn)
量詞 | 含義 |
---|---|
n+ | 匹配任何包含至少一個(gè) n 的字符串 |
n* | 匹配任何包含零個(gè)或多個(gè) n 的字符串 |
n? | 匹配任何包含零個(gè)或一個(gè) n 的字符串 |
n{x} | 匹配包含 X 個(gè) n 的序列的字符串 |
n{x,y} | 匹配包含 X 至 Y 個(gè) n 的序列的字符串 |
n{x,} | 匹配包含至少 X 個(gè) n 的序列的字符串 |
n$ | 匹配任何結(jié)尾為 n 的字符串 |
^n | 匹配任何開(kāi)頭為 n 的字符串 |
?=n | 匹配任何其后緊接指定字符串 n 的字符串 |
?!n | 匹配任何其后沒(méi)有緊接指定字符串 n 的字符串 |
W3school
菜鳥(niǎo)教程
JavaScript權(quán)威指南(第6版)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/93460.html
摘要:以指定模式分割字符串,返回結(jié)果為數(shù)組。為什么牢記,有什么用看代碼查找連續(xù)的相同的數(shù)字或者內(nèi)容是用子表達(dá)式只有字表達(dá)是中匹配的內(nèi)容才保存到緩存,這種行為叫捕獲。 前言 正則表達(dá)式之所以強(qiáng)大,是因?yàn)槠淠軐?shí)現(xiàn)模糊匹配,精確匹配沒(méi)有任何價(jià)值。 正則表達(dá)式學(xué)習(xí)筆記 第一章 JavaScript原型對(duì)象與原型鏈 1.1 正則表達(dá)式概念 RegExp:是正則表達(dá)式(regular expressio...
摘要:參考資料慕課網(wǎng)鬼斧神工之正則表達(dá)式正則表達(dá)式后向引用詳解正則表達(dá)式分鐘入門教程什么是正則表達(dá)式正則表達(dá)式是字符串的搜索和匹配的工具。貪婪模式懶惰模式后向引用分組捕獲的內(nèi)容可以在表達(dá)式或其他程序中作進(jìn)一步的處理。 參考資料 慕課網(wǎng)-鬼斧神工之正則表達(dá)式正則表達(dá)式后向引用詳解正則表達(dá)式30分鐘入門教程 什么是正則表達(dá)式? 正則表達(dá)式是字符串的搜索和匹配的工具。 正則表達(dá)式工具 一個(gè)測(cè)試正...
摘要:注意本文將正則與中的正則分開(kāi)討論。正則零寬斷言更多參考各種語(yǔ)言對(duì)于正則不同支持參考單行模式與多行模式通過(guò)設(shè)置正則表達(dá)式后的修飾符可開(kāi)啟對(duì)應(yīng)的匹配模式單行模式和多行模式。 最近這段時(shí)間幫同學(xué)處理一些文檔, 涉及到一些結(jié)構(gòu)化文檔的工作大部分都得使用正則表達(dá)式, 之前對(duì)于正則的認(rèn)識(shí)大多來(lái)源于語(yǔ)言書(shū)上那幾頁(yè)的介紹, 自己也沒(méi)有用過(guò)幾次。這里將我之前感到模糊的概念作個(gè)整理。因?yàn)閷?duì)JS了解多點(diǎn),所...
摘要:本文接上篇,基礎(chǔ)部分相對(duì)薄弱的同學(xué)請(qǐng)移步正則表達(dá)式學(xué)習(xí)筆記一理論基礎(chǔ)。正則表達(dá)式標(biāo)志符全局匹配,即找到所有匹配的。方法返回結(jié)果的格式不一致問(wèn)題這個(gè)問(wèn)題上文正則表達(dá)式學(xué)習(xí)筆記一理論基礎(chǔ)也有體現(xiàn),這里再單獨(dú)拿來(lái)說(shuō)一說(shuō),以加深記憶。 showImg(https://segmentfault.com/img/remote/1460000014261596?w=600&h=338); 本文接上篇...
摘要:于是我就先把這本薄的經(jīng)典書(shū)語(yǔ)言精粹修訂版豆瓣讀書(shū)本書(shū)簡(jiǎn)介總共章,除去附錄,才頁(yè),讀完并記錄了一些筆記。讀書(shū)筆記還可以分享給別人看。編程語(yǔ)言第版定義了的標(biāo)準(zhǔn)。程序檢查時(shí)丟棄值為函數(shù)的屬性。 之前看到這篇文章,前端網(wǎng)老姚淺談:怎么學(xué)JavaScript?,說(shuō)到怎么學(xué)習(xí)JavaScript,那就是看書(shū)、分析源碼。10本書(shū)讀2遍的好處,應(yīng)該大于一本書(shū)讀20遍??磿?shū)主動(dòng)學(xué)習(xí),看視頻是被動(dòng)學(xué)習(xí)???..
閱讀 1408·2021-09-23 11:21
閱讀 3105·2019-08-30 14:14
閱讀 3187·2019-08-30 13:56
閱讀 4136·2019-08-30 11:20
閱讀 1949·2019-08-29 17:23
閱讀 2765·2019-08-29 16:14
閱讀 1693·2019-08-28 18:18
閱讀 1490·2019-08-26 12:14