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