摘要:以指定模式分割字符串,返回結(jié)果為數(shù)組。為什么牢記,有什么用看代碼查找連續(xù)的相同的數(shù)字或者內(nèi)容是用子表達(dá)式只有字表達(dá)是中匹配的內(nèi)容才保存到緩存,這種行為叫捕獲。
前言
正則表達(dá)式之所以強(qiáng)大,是因為其能實現(xiàn)模糊匹配,精確匹配沒有任何價值。
正則表達(dá)式學(xué)習(xí)筆記 第一章 JavaScript原型對象與原型鏈 1.1 正則表達(dá)式概念RegExp:是正則表達(dá)式(regular expression)的簡寫,RegExp描述了一種字符串匹配的模式,可以用來檢查一個字符串是含有某種子串,將匹配的子串做替換或者從某個串中取出來符合某個條件的子串等。
1.2 正則表達(dá)式的用處數(shù)據(jù)隱藏,數(shù)據(jù)采集(爬蟲),數(shù)據(jù)過濾,數(shù)據(jù)驗證(表單驗證,手機(jī)號碼,郵箱地址等),解析、格式檢查等。
正則的定義格式也很簡單:
var t="ahmatbekjappar"; var reg=/j/; console.log(reg.test(t));//判斷我們查找字符是否存在,存在返回true第二章 標(biāo)準(zhǔn)庫中的正則對象 2.1 創(chuàng)建正則對象
創(chuàng)建正則對象的方法有兩種:實際開發(fā)中一般都采用字面量創(chuàng)建方法
1.字面量創(chuàng)建法:以斜杠表示開始和結(jié)束;2.構(gòu)造函數(shù)生成對象:通過實例化得到對象;
var t="ahmatbekjappar"; var reg1=/j/;//方式1 var reg2=new RegExp("j");//方式2 console.log(reg1.test(t)); console.log(reg2.test(t));
區(qū)別:
相同點:效果完全一樣,也就是等價的2.2 匹配模式不同點:第一種方法是編譯時新建正則表達(dá)式,第二種方法在運(yùn)行時新建正則表達(dá)式,也就是創(chuàng)建時機(jī)不一樣。
正則表達(dá)式是匹配模式,要么匹配字符,要么匹配位置
匹配模式指的是修飾符,表示正則匹配的附加規(guī)則,放在正則模式的最后面(尾部)。修飾符可以單個使用,也可以是多個一起用。
格式:var reg=/正則表達(dá)式/匹配模式;
在正則表達(dá)式中,匹配模式常用的兩種形式:g和i
g:global縮寫,代表全局匹配,匹配出所有滿足條件的結(jié)果,不加g的話第一次匹配成功后正則對象就停止繼續(xù)匹配。i:ignore縮寫,代表忽略大小寫,正則匹配時默認(rèn)區(qū)分大小寫,加了i就自動忽略字符串大小寫
var t="AklmanAhmatbeK"; var reg1=/akl/; var reg2="akl/i; console.log(reg1.test(t));//false console.log(reg1.test(t));//true2.3 正則對象的方法
對象.test(str):判斷字符串是否具有指定模式的子串,返回結(jié)果是一個布爾值;
對象.exec(str):返回字符串指定模式的子串,一次只能獲取一個與匹配的結(jié)果;
2.4 String對象的方法
search(reg):與indexOf非常相似,返回指定模式的子串在字符串首次穿線的位置。
match(reg):以數(shù)組的形式返回指定模式的字符串,可以返回所有匹配的結(jié)果。
replace(reg,"將替換的字符"):把指定模式的子串進(jìn)行替換操作。
split(reg):以指定模式分割字符串,返回結(jié)果為數(shù)組。
第三章 要牢記住的概念
子表達(dá)式:在正則表達(dá)式中,通過一對圓括號起來的內(nèi)容,被稱之為“子表達(dá)式”;var reg=/d(d)d/gi;
捕獲:在正則表達(dá)式中,子表達(dá)式匹配到相應(yīng)的內(nèi)容時,系統(tǒng)會自動捕獲這個行為,然后將子表達(dá)式匹配到的內(nèi)容放入系統(tǒng)的緩存中,這過程就是“捕獲”。
反向引用:在正則表達(dá)式中,可以使用n(n>0,正整數(shù),代表系統(tǒng)中的緩存區(qū)編號)來獲取緩沖區(qū)中的內(nèi)容,這個過程就是“反向引用”。
為什么牢記,有什么用?看代碼:查找連續(xù)的相同的數(shù)字或者內(nèi)容是用
第四章 正則表達(dá)式應(yīng)用 4.1 正則表達(dá)式的組成正則表達(dá)式是由普通字符(例如字符a到z)以及特殊字符(成為元字符)組成的文字模式。正則表達(dá)式作為一個模板,將某個字符模式與所搜索的字符串進(jìn)行匹配。正則表達(dá)式三步走:1.查什么?2.查多少?3.從哪查?
4.2 匹配符(查什么)匹配符:字符匹配符用于匹配某個或某些字符;例如d就是匹配0-9的數(shù)字。
在正則表達(dá)式中,通過一對中括號起來的內(nèi)容,稱之為"字符簇"。字符簇代表的是一個范圍,但是匹配時,只能匹配某個范圍中的固定的結(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 |
在字符簇中,通過一個^(脫字符)來表示取反的含義:
字符簇 | 含義 |
---|---|
1 | 匹配除字符a到字符z之外的任一字符 |
2 | 匹配除字符a,b,c,d外的字符 |
3 | 匹配除數(shù)字0到9之外的任一字符 |
常用的比較特殊的匹配符:
字符簇 | 含義 |
---|---|
d | 匹配一個數(shù)字字符,與使用[0-9]等價 |
D | 匹配一個非數(shù)字字符,還可以使用[脫字符0-9] |
w | 匹配包括下劃線的任何字母數(shù)字下劃線字符,還可以使用[0-9a-zA-Z] |
W | 匹配任何非字母數(shù)字下劃線字符,還可以[脫字符w] |
s | 匹配任何空白字符 |
S | 匹配任何非空白字符,還可以使用[脫字符s] |
.(是個點) | 匹配除"n"之外的任何單個字符 |
[u4e00-u9fa5] | 匹配中文字符中的任一字符 |
限定符可以指定正則表達(dá)式的一個給定字符必須要出現(xiàn)多少次才能滿足匹配。
字符簇 | 含義 |
---|---|
* | 匹配前面的子表達(dá)式零次或多次,0到多 |
+ | 匹配前面的子表達(dá)式一次或多次,1到多 |
? | 匹配前面的子表達(dá)式零次或一次,0或1 |
{n} | 匹配確定的 n 次 |
{n,} | 至少匹配n 次 |
{n,m} | 最少匹配 n 次且最多匹配 m 次 |
對qq號碼進(jìn)行校驗要求5-10位,不能以0開頭,只能是數(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是一個意思 var reg3=/[1-9]d{0,1}?/; console.log(str.match(reg2)); console.log(str.match(reg3));
正則表達(dá)式中默認(rèn)情況下能匹配多就不會匹配少,這種匹配模式就是貪婪模式(貪婪匹配)。
如果想少匹配或者限定的位數(shù)匹配則使用非貪婪模式,也就是優(yōu)先匹配滿足條件情況下的優(yōu)先匹配少的,這種非貪婪模式也被稱為惰性匹配。
4.4 定位符(從哪查)正則表達(dá)式只會到字符串去尋找是否有與之匹配的內(nèi)容,如果有就默認(rèn)是正確的,就不會考慮其字符串本身是否 合法的。因此必須使用定位符來將一個正則表達(dá)式固定在一行的開始或者結(jié)束;也可以創(chuàng)建只在單詞內(nèi)或者只在單詞的開始或結(jié)尾處出現(xiàn)的正則表達(dá)式。
字符簇 | 含義 |
---|---|
^ | 匹配輸入字符串的開始位置 |
$ | 匹配輸入字符串的結(jié)束位置 |
b | 匹配一個單詞邊界 |
B | 匹配非單詞邊界 |
注意:脫字符放在字符簇中是取反的意思,放在整個表達(dá)式中是開始位置的。
問題1:用正則表達(dá)式,匹配字符串"lsd15309873475"中的的手機(jī)號
/**分析 *手機(jī)號第一位必須是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));//給滿分
問題2:
var str = "i am zhangsan"; //an必須是一個完整的單詞 var reg = /an/; console.log(str.match(reg)); //an不能是單詞的開始,只能是單詞的結(jié)束 var reg1 = /Ban/; console.log(str.match(reg1));4.5 轉(zhuǎn)義字符
因為在正則表達(dá)式中 .(點) + 等是屬于表達(dá)式的一部分,但是我們在匹配時,字符串中也需要匹配
這些特殊字符,所以,我們必須使用 反斜杠 對某些特殊字符進(jìn)行轉(zhuǎn)義;
需要轉(zhuǎn)義的字符 | |
---|---|
點. | |
小括號() | |
中括號[] | |
左斜杠/ | |
右斜杠 | |
選擇匹配符 |
問題1:匹配一個合法的網(wǎng)址URL:
var str="http://aklman.com"; //對于. /都必須轉(zhuǎn)義匹配 var reg=/w+://w+.w+/; console.log(str.match(reg));//http://aklman.com
問題2:使用正則表達(dá)式驗證郵箱是否合法
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ù)測,前瞻,先行斷言
問題1:請把ing結(jié)尾的單詞的詞根部分(即不含ing部分)找出來:
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ù)測,前瞻,先行否言
問題2:把不是ing結(jié)尾的單詞找出來
var str="sorry,when i am working,do not calling me!"; var reg=/w+(?!ing)w{3}/g;//負(fù)向預(yù)查、負(fù)預(yù)測、前瞻 console.log(str.match(reg));//["sorry", "when"]補(bǔ)充知識點
量詞 | 含義 |
---|---|
n+ | 匹配任何包含至少一個 n 的字符串 |
n* | 匹配任何包含零個或多個 n 的字符串 |
n? | 匹配任何包含零個或一個 n 的字符串 |
n{x} | 匹配包含 X 個 n 的序列的字符串 |
n{x,y} | 匹配包含 X 至 Y 個 n 的序列的字符串 |
n{x,} | 匹配包含至少 X 個 n 的序列的字符串 |
n$ | 匹配任何結(jié)尾為 n 的字符串 |
^n | 匹配任何開頭為 n 的字符串 |
?=n | 匹配任何其后緊接指定字符串 n 的字符串 |
?!n | 匹配任何其后沒有緊接指定字符串 n 的字符串 |
W3school
菜鳥教程
JavaScript權(quán)威指南(第6版)
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/28388.html
摘要:以指定模式分割字符串,返回結(jié)果為數(shù)組。為什么牢記,有什么用看代碼查找連續(xù)的相同的數(shù)字或者內(nèi)容是用子表達(dá)式只有字表達(dá)是中匹配的內(nèi)容才保存到緩存,這種行為叫捕獲。 前言 正則表達(dá)式之所以強(qiáng)大,是因為其能實現(xiàn)模糊匹配,精確匹配沒有任何價值。 正則表達(dá)式學(xué)習(xí)筆記 第一章 JavaScript原型對象與原型鏈 1.1 正則表達(dá)式概念 RegExp:是正則表達(dá)式(regular expressio...
摘要:聲明語句是可選部分如果存在需要放在文檔的第一行所謂的文檔聲明就是告訴解析器當(dāng)前文檔格式版本號以及編碼格式。所有的元素都必須是成對閉合標(biāo)簽非閉合標(biāo)簽是非法的,解析器將報錯,不無正常解析標(biāo)簽對大小寫敏感必須頭尾標(biāo)簽一致。 前言 一直想系統(tǒng)性的學(xué)XML,就沒時間學(xué),今晚抽出幾個小時時間學(xué)完了XML。過幾天再過來看看,背一背應(yīng)該就差不多,記得東西較多,沒什么難理解的。 XML數(shù)據(jù)傳輸格式 第一...
摘要:聲明語句是可選部分如果存在需要放在文檔的第一行所謂的文檔聲明就是告訴解析器當(dāng)前文檔格式版本號以及編碼格式。所有的元素都必須是成對閉合標(biāo)簽非閉合標(biāo)簽是非法的,解析器將報錯,不無正常解析標(biāo)簽對大小寫敏感必須頭尾標(biāo)簽一致。 前言 一直想系統(tǒng)性的學(xué)XML,就沒時間學(xué),今晚抽出幾個小時時間學(xué)完了XML。過幾天再過來看看,背一背應(yīng)該就差不多,記得東西較多,沒什么難理解的。 XML數(shù)據(jù)傳輸格式 第一...
摘要:參考資料慕課網(wǎng)鬼斧神工之正則表達(dá)式正則表達(dá)式后向引用詳解正則表達(dá)式分鐘入門教程什么是正則表達(dá)式正則表達(dá)式是字符串的搜索和匹配的工具。貪婪模式懶惰模式后向引用分組捕獲的內(nèi)容可以在表達(dá)式或其他程序中作進(jìn)一步的處理。 參考資料 慕課網(wǎng)-鬼斧神工之正則表達(dá)式正則表達(dá)式后向引用詳解正則表達(dá)式30分鐘入門教程 什么是正則表達(dá)式? 正則表達(dá)式是字符串的搜索和匹配的工具。 正則表達(dá)式工具 一個測試正...
閱讀 1402·2021-10-14 09:43
閱讀 992·2021-09-10 10:51
閱讀 1443·2021-09-01 10:42
閱讀 2189·2019-08-30 15:55
閱讀 586·2019-08-30 15:55
閱讀 2339·2019-08-30 14:21
閱讀 1715·2019-08-30 13:04
閱讀 3467·2019-08-29 13:09