摘要:主要目的是想要中間那一塊除了之外的都可行,取的補(bǔ)集中間部分純文字,不含大于號(hào),和小于號(hào)。匹配為例匹配到的數(shù)組,第個(gè)單元,代表整個(gè)正則表達(dá)式的匹配結(jié)果則代表第個(gè)子表達(dá)式匹配的結(jié)果。
正則應(yīng)用
正則表達(dá)式在web開發(fā)中的常用
郵箱驗(yàn)證
用戶名驗(yàn)證
替換字符串某一部分
信息采集,用來分析有效代碼段
...
有規(guī)律的字符串描述
正則表達(dá)式是一門獨(dú)立的知識(shí),同樣的一段描述,比如,對于email的匹配表達(dá)式,在不同的語言是一樣的,但是調(diào)用的函數(shù)不同。
正則表達(dá)式--規(guī)則表達(dá)式
正則表達(dá)式:正則表達(dá)式
正則表達(dá)式語法:正則表達(dá)式語法
正則表達(dá)式語言:正則表達(dá)式語言
準(zhǔn)備性的工作
在js中,如何寫正則表達(dá)式。 /RegExp/
在js里,用正則表達(dá)式來驗(yàn)證字符串是否滿足, 使用 reg.test(str);
用正則表達(dá)式的exec函數(shù),用來查找匹配的選項(xiàng),并把查找的值取出。
reg.test(str); 返回true 或者false 。 常在表單驗(yàn)證中使用。
請輸入姓名:
請輸入年齡:
exec(); 返回 數(shù)組 或 null。
exec是英語execute的意思,CEO首席執(zhí)行官,E就是executive執(zhí)行的
“執(zhí)行” 把正則式放到字符串上執(zhí)行
每次執(zhí)行結(jié)果按序輸出,不管結(jié)果有幾個(gè),一次只輸出一個(gè) ,如果多次輸出,會(huì)保持前面的引用。當(dāng)匹配超過原字符串的時(shí)候,會(huì)返回null。然后遇到null,指針返回到匹配的字符的第一位。 具有迭代器的感覺。
var str = "ABCDEFG1234567abcdefg"; var reg = /[a-z]/g; console.log( a=/[a-z]/g.exec(str) ); var a; while( a=reg.exec(str) ){ //這邊 null 為 fasle。 exec() 會(huì)保持對前面一次的引用。 需要使用 值來賦值。 console.log( a ); }
使用exec() 找最大子串
var str = "AAABBBCCCCCCC"; var reg = /(w)1+/g; var maxLength = 0; var maxLetter = ""; var a; while( a=reg.exec(str) ){ if( a[0].length>maxLength ){ maxLength = a[0].length; maxLetter = a[0]; } } console.log( maxLetter );
var str="BCDEFG1234567abcdefg"; var reg = /[a-z]/g; var a; while( (a=reg.exec(str)) != null ){ //先賦值給a,然后再與后邊判斷。 console.log( a ); }
str.match( reg ); //查找,匹配到,返回?cái)?shù)組
str.split( reg ); //拆分,返回?cái)?shù)組
str.serch( reg ); //查找位置
str.replace( reg,"new str"); //正則替換,返回string
//測試是否含有hi var reg = /hi/; //僅看字符串是否有 hi console.log( reg.test("hello") ); //fasle console.log( reg.test("this is iqianduan") ); //true //測試單詞 hi var reg01 = /hi/; console.log( reg01.test("this is") ); //false console.log( reg01.test("this is, hi,his") );//true正則表達(dá)式 3 句話
要找什么字符要找什么字符?
從哪兒找?
找?guī)讉€(gè)?
字面值, ‘hi’ ,就是找‘hi’。
用字符的集合來表示 , [abcd], 指匹配abcd中任意一個(gè)
//找不吉利的數(shù)字 //3,4,7 var reg = /[3,4,7]/; //字符集合, 不能使用 /347/ 字面值表示,是表示整體。 console.log( reg.test("12121212") );//false console.log( reg.test("12341234") ); //true
用范圍表示字符 , [0-9] [0123456789] [a-z] [A-Z]
// var reg = /[0123456789]/; var reg = /[0-9]/; console.log( reg.test("123afsdf") ); //true console.log( reg.test("asdf") ); //false //是否有大寫字母 var reg = /[A-Z]/; console.log( reg.test("asdf") );//false console.log( reg.test("Tomorrow is another day") ); //true
字符簇, 花團(tuán)錦簇-> 一坨字符。
系統(tǒng)為常用的字符集合,創(chuàng)建的簡寫.
例如:
[0-9] --> d
[0-9a-zA-Z_] --> w .. 域名,注冊用戶名常用的模式.
[ vf ] --> s 空白符.
//是否含有數(shù)字 var reg = /d/; console.log( reg.test("123afsdf") ); //true console.log( reg.test("asdf") ); //false
補(bǔ)集的形式來表示字符集合 在集合前面使用表示補(bǔ)集。
[0-9]---> [^0-9] ^ 脫字符號(hào): 念法: caret。["k?r?t] 。
[abcdef]-->[^abcdef]
//驗(yàn)證全為數(shù)字
var reg = /^[0-9]/; //匹配非數(shù)字
// var reg = /^d/ //字符簇補(bǔ)集
console.log( reg.test("aaaaa") );//非數(shù)字存在 false
console.log( reg.test("123aaa") ); //有數(shù)字存在 true
字符簇的補(bǔ)集:
d -- > D(非數(shù)字)
s --> S(非空白字符)
w --> W
任意字符 : . 唯獨(dú)不包括換行符
從哪兒找,找到哪兒b 單詞邊界
/bhi/ --> 從單詞的邊界開始匹配hi。
// 匹配單詞hi,包括hi本身 // var reg = /hi.+/;//錯(cuò)誤 // var reg = /hiw+/; //錯(cuò)誤。 + --> 至少有 一個(gè) var reg = /hiw*/; console.log( reg.exec("this is") ); //null console.log( reg.exec("his") ); //["his", index: 0, input: "his"] console.log( reg.exec("history") ); //["history", index: 0, input: "history,hi"]
//匹配進(jìn)行時(shí)的結(jié)尾 var reg = /[a-zA-Z]+ing/; console.log( reg.exec("going") );//["going", index: 0, input: "going"] console.log( reg.exec("1ting.com") );//null console.log( reg.exec("ing") );//null //2 -> to 4->for 0->zero
//匹配un前綴的反義詞 //unhappy happy,hungry,sun,unhappy var reg = /un[w]+/; console.log( reg.exec("happy,hungry,sun,unhappy") ); //["unhappy", index: 17, input: "happy,hungry,sun ,unhappy"]
B 單詞的非邊界
// 把單詞中間的某一個(gè)部分取出來。 // 把中間含有hi的單詞取出,即hi不能在兩端。 var reg = /BhiB/; console.log( reg.exec("this") ); //["hi", index: 1, input: "this"] console.log( reg.exec("hi") ); //null
^ creat , 從字符串的起始位置開始匹配
$ 匹配到字符串的結(jié)束位置
從字符串的開頭到結(jié)尾開始匹配,模擬運(yùn)行順序.
var reg = /^lishi$/; console.log( reg.exec("lishinihao") ); null console.log( reg.exec("lishi") ); //["lisi", index: 0, input: "lisi"]找多少
模式*, [0,n] --> {0, }
+ , [1,n] -->{1, }
? , [0,1] -->{0,1}
n {n} {3} a{n} , 字符a準(zhǔn)確的出現(xiàn)n次
a{n,} 字符a,至少出現(xiàn)n次。
a{n,m} 字符串a(chǎn),出現(xiàn)n到m次。
以匹配為例,默認(rèn)情況下,找到一次結(jié)果符合就結(jié)束。
告知匹配過程,一直找,在全文范圍內(nèi)一直找。
g -> 全局模式, global 找所有的,而不是找一次就結(jié)束
i -> 忽略大小寫,ignore
//查找所有中間含有hi的單詞 var reg = /BhiB/gi; var str = "shit,hi,this,thit,THIS"; console.log( str.match(reg) ); //["hi", "hi", "hi", "HI"]
確定邊界是什么,那些東西必須有,那些東西可能有可能沒有。配合+,*
//把鏈接換成 # // --> //1,不能保留鏈接的文字(反向引用) //2,不能跨行(貪婪模式) var reg = //g; var str = "文字") );
js不支持單行模式。
//s 單行模式:把整個(gè)字符串看成一行 . 代表任意,但不包括換行。
在js里,不支持當(dāng)行模式的情況下,如何換行?
什么樣的模式能代表“所有” 字符串
sS 全部字符 使用一個(gè)技巧, 一個(gè)集合加補(bǔ)集,就是全集
[dD] [sS] [wW]
var reg = //g; var str = ""; console.log( str.replace(reg,"文字") ); //s 多行模式:碰到一行就把當(dāng)前的當(dāng)成一個(gè)字符串來解析
//把每一行的結(jié)尾的數(shù)字換成 # //車牌號(hào) //Cx003 //A0008 //B3456 var str = "Cx003"+ "A0008"+ "B3456"; var reg = /d+$/gm; console.log( str.replace(reg,"#") );貪婪模式
貪婪模式
如果"?"緊跟在在任何量詞*, + , ?,或者是{}的后面,將會(huì)使量詞變成非貪婪模式(匹配最少的次數(shù)),和默認(rèn)的貪婪模式(匹配最多的次數(shù))正好相反。
比如,使用/d+/非全局的匹配“123abc”將會(huì)返回“123”,如果使用/d+?/,那么就只會(huì)匹配到“1”。
當(dāng)正則表達(dá)式中包含能接受重復(fù)的限定符時(shí),通常的行為是(在使整個(gè)表達(dá)式能得到匹配的前提下)匹配盡可能多的字符。以這個(gè)表達(dá)式為例:a.b,它將會(huì)匹配最長的以a開始,以b結(jié)束的字符串。如果用它來搜索aabab的話,它會(huì)匹配整個(gè)字符串a(chǎn)abab。這被稱為貪婪匹配。
任何量詞后面 跟 ? 代表非貪婪模式 , 滿足條件就不找了,小富即安,打完收工。 修飾個(gè)數(shù),盡量少找和多找的。
//goooooooooods --> goods var str = "goooooooooods,goooods,goooood,gooooo,gooooods"; var reg = /g[o]{3,}?ds/g; console.log( str.replace(reg,"goods") ); //goods,goods,goooood,gooooo,goods欲查 正向欲查
欲查不消耗字符。
//查找進(jìn)行時(shí)的單詞的詞根, 即 不要ing 。 going -> go var str = "going,comming,fly"; // var reg = /[a-zA-Z]+ing/g; var reg = /[w]+(?=ing)/g; // 類似探照燈,先去判斷幾位是否滿足,滿足返回,不滿足繼續(xù)下一位. console.log( str.match(reg) );
滿足 ing ,找到com。
不滿足接著走。 看見不滿足條件,并不會(huì)一次性調(diào)到ing后面接下去尋找,而是從該處光標(biāo)繼續(xù)尋找。
已經(jīng)查找的詞是消耗了,下次從該處光標(biāo)開始尋找。
//查找進(jìn)行時(shí)的單詞的詞根, 即 不要ing 。 going -> go var str = "going,comming,fly"; // var reg = /[a-zA-Z]+ing/g; // var reg = /[a-zA-Z]+(?=ing)/g; //結(jié)尾 是錯(cuò)誤的, 欲查不消耗字符, 相當(dāng)于/[a-zA-Z]+/ 這種形式 var reg = /[a-zA-Z]+(?=ing)/g; // 類似探照燈,先去判斷幾位是否滿足,滿足返回,不滿足繼續(xù)下一位. console.log( str.match(reg) ); // ["go", "comm"]負(fù)向欲查
不是誰才行。 往后看一定位數(shù),不是誰才可以。 不要后面是某某某的東西。
//查找win98,win95,win32,win2003,winxp -->win98,win32,win2003,winxp var str = "win98,win95,win32,win2003,winxp"; var reg = /win(?!95)/g; console.log( str.match(reg) ); // ["win", "win", "win", "win"]
js不支持,向前正向欲查,向前負(fù)向欲查:
//找出 un系列單詞的詞根 var reg = /[w]+(?<=un)/g; var str = "unhappy"; console.log(str.match(reg)); //報(bào)錯(cuò) var reg = /[w]+(? 反向引用反向引用,也叫后向引用?;蛘叻纸M或子表達(dá)式
一般是整個(gè)表達(dá)式, 但是中間的部分 有特殊做了描述。 需要的部分特殊處理。使用分組,叫做子表達(dá)式。
//把鏈接換成空連接,保持文字信息。 var str = "]+>([^<>]+)/; //超鏈接的表達(dá)式 console.log( reg.exec(str) ); //["]>([^<>]+) 主要目的是想要中間那一塊 除了>之外的都可行 , 取> 的補(bǔ)集 [^>] 中間部分純文字,不含大于號(hào),和小于號(hào)。 取小于號(hào)和大于號(hào)的補(bǔ)集 [^<>]+ / [sS]+ */ //一般是整個(gè)表達(dá)式, 但是中間的部分 有特殊做了描述。 需要的部分特殊處理。使用分組,叫做子表達(dá)式。 //匹配html // /]*)?>[sS]*/ /*exec為例: 匹配到的數(shù)組,第0個(gè)單元,代表"整個(gè)正則表達(dá)式的匹配結(jié)果" 1,2,3,4....N,則代表第N個(gè)子表達(dá)式匹配的結(jié)果。 //js頂多有9個(gè)子表達(dá)式。 // ["陰天快樂", "陰天快樂", index: 0, input: "$1") ); //陰天快樂 var str = ""; var reg = /]*)?>[sS]*/; console.log( reg.exec(str) ); str.replace(reg,function( $1,$2 ){ console.dirxml($2); //html });如何引用子表達(dá)式所匹配的結(jié)果?
在正則外邊使用:$N 來匹配 第N個(gè)子表達(dá)式的匹配結(jié)果。
在正則里邊使用N來 使用第N個(gè)子表達(dá)式。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/79885.html
摘要:簡言在中,經(jīng)常會(huì)用到正則表達(dá)式來進(jìn)行模式匹配。要寫出正確的正則表達(dá)式,先要定義表達(dá)式規(guī)則。重復(fù)在正則表達(dá)式中用來表示元素重復(fù)出現(xiàn)的次數(shù)。給出測試結(jié)果如下毛三胖子測試代碼根據(jù)以上內(nèi)容,定義你自己的登錄名正則表達(dá)式吧原文鏈接 簡言 在JavaScript中,經(jīng)常會(huì)用到正則表達(dá)式來進(jìn)行模式匹配。例如,登錄名驗(yàn)證,密碼強(qiáng)度驗(yàn)證,字符串查找或替換等操作?,F(xiàn)在就開始吧,零基礎(chǔ)寫出你的第一個(gè)正則表達(dá)...
摘要:用戶名正則用戶名正則,到位字母,數(shù)字,下劃線,減號(hào)輸出密碼強(qiáng)度正則密碼強(qiáng)度正則,最少位,包括至少個(gè)大寫字母,個(gè)小寫字母,個(gè)數(shù)字,個(gè)特殊字符輸出整數(shù)正則正整數(shù)正則負(fù)整數(shù)正則整數(shù)正則輸出輸出輸出數(shù)字正則可以是整數(shù)也可以是浮點(diǎn) 1 用戶名正則 //用戶名正則,4到16位(字母,數(shù)字,下劃線,減號(hào)) var uPattern = /^[a-zA-Z0-9_-]{4,16}$/; //輸出 tr...
摘要:對象對象對象表示正則表達(dá)式,它是對字符串執(zhí)行模式匹配的強(qiáng)大工具。查找以十六進(jìn)制數(shù)規(guī)定的字符。支持正則表達(dá)式的對象的方法方法描述檢索與正則表達(dá)式相匹配的值。替換與正則表達(dá)式匹配的子串。 RegExp對象 RegExp 對象 RegExp 對象表示正則表達(dá)式,它是對字符串執(zhí)行模式匹配的強(qiáng)大工具。 直接量語法 /pattern/attributes 創(chuàng)建 RegExp 對象的語法 new R...
摘要:人手腿嘴大手長腿歐巴櫻桃小嘴我們知道造人是一個(gè)整體不可能先造手再造腿最后造嘴,我們現(xiàn)在的需求是一旦實(shí)例化人這個(gè)對象,該有的都有了。簡單修改以上代碼大手長腿歐巴櫻桃小嘴調(diào)用函數(shù)我們在每個(gè)中添加了將原有對象返回避免無返回值的函數(shù)執(zhí)行完之后是。 高級(jí)javascript函數(shù) js中沒有class的概念,我們可以使用function來模擬。 惰性載入函數(shù) 例如我們通常使用以下的js代碼創(chuàng)建aj...
摘要:正則表達(dá)式是用于匹配字符串中字符組合的模式。在中,正則表達(dá)式也是對象。注意如果正則表達(dá)式設(shè)置了全局匹配標(biāo)志,和的執(zhí)行會(huì)改變正則表達(dá)式屬性。顯示顯示方法執(zhí)行一個(gè)檢索,用來查看正則表達(dá)式與指定的字符串是否匹配。 正則表達(dá)式是用于匹配字符串中字符組合的模式。在 JavaScript中,正則表達(dá)式也是對象。這些模式被用于 RegExp 的 exec 和 test 方法, 以及 String 的...
閱讀 2779·2023-04-25 21:26
閱讀 1543·2021-11-25 09:43
閱讀 1975·2019-08-30 15:52
閱讀 955·2019-08-30 14:05
閱讀 2641·2019-08-29 16:10
閱讀 444·2019-08-29 13:48
閱讀 1885·2019-08-29 12:47
閱讀 1324·2019-08-23 18:04