摘要:寫在前面的一些廢話沒有看過上一篇文章的盆友有福了今天沒錯就是現(xiàn)在我將免費(fèi)免費(fèi)將上篇文章的鏈接發(fā)出來這里是上篇上回說了怎么寫出正則,這次展示下在中使用正則的場景正則對象屬性的正則對象有以下幾個屬性,其中前面三個也叫修飾符也就是表達(dá)式兩條杠后面
寫在前面的一些廢話
沒有看過上一篇文章的盆友有福了!
今天!沒錯!就是現(xiàn)在!我將免費(fèi)!all f*cking FREE!
免費(fèi)將上篇文章的鏈接發(fā)出來!
這里是上篇
上回說了怎么寫出正則,這次展示下在js中使用正則的場景!
正則對象屬性javascript的正則對象有以下幾個屬性,其中前面三個也叫修飾符(也就是/表達(dá)式/兩條杠后面的字符,比如上一篇文章出現(xiàn)的 /is/g 的這個g)。
global:是否全文搜索,默認(rèn)false
ignoreCase:是否大小寫敏感,默認(rèn)false,即不忽略大小寫
multiline:是否多行搜索,默認(rèn)false
lastIndex:當(dāng)前表達(dá)式匹配內(nèi)容的最后一個字符的下一個位置
source:正則表達(dá)式的文本字符串,也就是“/表達(dá)式/修飾符”中的表達(dá)式,var reg=/is/g; reg.source就是is
正則相關(guān)的方法js中,RegExp對象有兩個內(nèi)置方法
test
exec
此外,還有一些String對象的方法也支持正則表達(dá)式,它們是
search
match
split
replace
test()test() 方法用于檢測一個字符串是否匹配某個模式,返回true或者false.
var reg = /w/; reg.test("abc"); //true reg.test("abc"); //true reg.test("abc"); //true reg.test("@#$%") //false reg.test("@#$%") //false //為什么要多執(zhí)行幾遍呢?你可能會以為樓主lu多了導(dǎo)致老眼昏花多輸入了幾遍。but NO!多執(zhí)行幾遍是為了和下面作對比。
當(dāng)我們的正則表達(dá)式加上了g修飾符以后,這個方法出現(xiàn)了一些不同
var reg = /w/g; reg.test("abc");//true reg.test("abc");//true reg.test("abc");//true reg.test("abc");//false
為什么會這樣呢?因?yàn)楫?dāng)我們加上全局搜索這個修飾符后,test()方法會返回結(jié)果,并且更新reg對象的屬性(lastIndex),他會在上一次lastIndex的位置開始往后查找,而不是從頭開始。
所以這個方法建議不要加g,如果你這個人比較倔強(qiáng),非要加的話,你可以每次都重新初始化一個正則對象,因?yàn)樗谝淮蔚慕Y(jié)果是和沒有加g的時候是一樣的。
Like this。
var reg = /w/g;reg.test("abc");//true //每次都初始化正則對象,把這兩行寫在一行里比較好復(fù)制,因?yàn)榉珠_復(fù)制一不小心就出現(xiàn)了上面的問題exec()
exec()方法用于使用正則表達(dá)式對字符串執(zhí)行搜索,并將更新全局RegExp對象的屬性以反應(yīng)匹配結(jié)果
如果沒有匹配到文本則返回null,否則返回一個結(jié)果數(shù)組:
數(shù)組第一個元素是與正則表達(dá)式相匹配的文本
第二個元素是與正則表達(dá)式的第一個子表達(dá)式(也就是分組1)相匹配的文本(如果有分組1的話)
第三個元素是與正則表達(dá)式的第二個子表達(dá)式(分組2)相匹配的文本(如果有分組2的話)
除了數(shù)組元素和 length 屬性之外,exec() 方法還返回兩個屬性。index 屬性聲明的是匹配文本的第一個字符的位置。input 屬性則存放的是被檢索的字符串 string。
var reg = /(d)(w)/ //上篇文章已經(jīng)介紹過分組了,這里的兩個括號分別是分組1和分組2 reg.exec("1a2b3c4d5e");
當(dāng)我們的正則表達(dá)式加上了g修飾符以后,這個方法又出現(xiàn)了一些不同
var reg = /(d)(w)/g reg.exec("1a2b3c4d5e");
還是上圖片比較簡單~
這個表現(xiàn)跟test是一個尿性的,即非全局調(diào)用(不加g)的時候不會更新lastIndex(lastIndex不生效),全局調(diào)用的時候會更新lastIndex
說完了比較復(fù)雜的有分組的情況,我們來看看沒有分組的情況,言簡意賅,你作為這么優(yōu)秀的一個人,應(yīng)該能隨便看懂吧。
var reg = /dw/ reg.exec("1a2b3c4d5e");
對于這個方法呢,如果我們只需要查找第一個匹配結(jié)果的話可以不加g,如果需要返回所有匹配結(jié)果的話,需要循環(huán)執(zhí)行reg.exec(),并且需要加上g。
search()search()方法用于檢索字符串中制定的子字符串或者檢索與正則表達(dá)式相匹配的子字符串。
方法返回第一個匹配結(jié)果的index,查找不到返回-1
search()方法會忽略g標(biāo)志,總是從字符串的開頭進(jìn)行檢索
當(dāng)我們傳入的參數(shù)s字符串時,它會轉(zhuǎn)換成正則表達(dá)式 var str = "abcd1234" str.search("1") //4 str.search(/1/) //4 str.search("hello") //-1 str.search(/hello/) //-1
so easy~下一個
match()非全局調(diào)用情況下(不加g):
這個方法類似于exec(),返回值是一毛一樣的,one hair one style。
match()方法可在字符串內(nèi)檢索指定的值,或找到一個或多個正則表達(dá)式的匹配
如果沒有匹配到文本則返回null,否則返回一個結(jié)果數(shù)組:
數(shù)組第一個元素是與正則表達(dá)式相匹配的文本
第二個元素是與正則表達(dá)式的第一個子表達(dá)式(也就是分組1)相匹配的文本(如果有分組1的話)
第三個元素是與正則表達(dá)式的第二個子表達(dá)式(分組2)相匹配的文本(如果有分組2的話)
除了數(shù)組元素和 length 屬性之外,match() 方法還返回兩個屬性。index 屬性聲明的是匹配文本的第一個字符的位置。input 屬性則存放的是被檢索的字符串 string。
var str = "1a2b3c4d"; var reg = /(d)(w)/; str.match(reg);
當(dāng)我們的正則表達(dá)式加上了g修飾符以后,這個方法又出現(xiàn)了一些不同,我為什么要說‘又’
match()方法的返回改變了,變化害...害挺大的,跟前面的exec()和test()方法又有不同
如果沒有匹配到文本則返回null,否則返回一個結(jié)果數(shù)組:
數(shù)組元素為與正則表達(dá)式匹配的文本
var str = "1a2b3c4d"; var reg = /(d)(w)/g; str.match(reg);
你有沒有發(fā)現(xiàn),即使我已經(jīng)貼了圖,卻還是寫了代碼,為什么?
因?yàn)樽鳛橐粋€這么sweet 和 warm的人,我有必要為你節(jié)省你自己輸入代碼的時間,你現(xiàn)在只需要ctrl C 然后ctrl V就可以在瀏覽器控制瘋狂驗(yàn)證我的圖片,瘋狂測試這些方法!
split()方法用于把一個字符串分割成字符串?dāng)?shù)組。
//這個也可以輸入字符串作為參數(shù),類似于search(),它會轉(zhuǎn)換成正則 var str = "a,b,c,d" str.split(","); //["a","b","c","d"] str.split(/,/); //["a","b","c","d"]
//一般情況都是使用字符串居多,比較復(fù)雜的情況就可以使用正則 var str ="a1b2c3"; str.split(/d/); //["a", "b", "c", ""] //注意:如果字符串最后的子字符串剛好符合參數(shù)的正則,那么就會多了一個空的元素,像上面一樣replace()
來了來了,上篇文章中使用最多的replace()終于來了!??!AV8D shout with me! RRRRRRRRrrrrrrrrrrrrrr~EEEEEEE~PPPPP~LLLL~AAAA~CCCCC~EEEEE。
該方法用于在字符串中用一些字符替換另一些字符,或替換一個與正則表達(dá)式匹配的子串。
1、 一般用法,這里是一般用法啊,replace("找誰","替換成誰")
該用法的全局與非全局調(diào)用的差別是‘替換第一個匹配項(xiàng)’和‘替換所有匹配項(xiàng)’。
舉個常用的例子
//這個‘找誰’同樣也可以是字符串或者是正則,類似于split(),search() var str = "hello I am leelei"; str.replace("leelei","嶺南吳彥祖"); //"hello I am 嶺南吳彥祖" str.replace(/leelei/,"嶺南吳彥祖"); //"hello I am 嶺南吳彥祖"
好吧,這個對于你們來說并不常用,可能是只有我在用而已,抱歉。寫個你們常用的例子吧
var str = "2018-11-26"; str.replace(/-/,"/"); //"2018/11-26" //看到?jīng)]有,這里只替換了一個- str.replace(/-/g,"/"); //"2018/11/26" //只有全局調(diào)用的時候,才會替換所有的匹配文本
2、 進(jìn)階用法,replace("找誰",回調(diào)函數(shù)),每次匹配替換的時候調(diào)用,有4個參數(shù)
1、匹配的字符串
2、正則表達(dá)式分組內(nèi)容,沒有分組就沒有這個這個參數(shù),幾個分組就幾個該參數(shù)
3、匹配項(xiàng)在字符串中的index
4、原字符串,replace()方法不會改變原字符串的哦。
//**當(dāng)沒有分組的時候** var str ="a5b6c7d8"; //可以根據(jù)下面的截圖對照上面的參數(shù)來理解記憶。 //這里是給每一個匹配的數(shù)字+1. str.replace(/d/g,function(match,index,origin){ console.log(match,index,origin); return match-0+1; });
//**當(dāng)有分組的時候**
//為字符串中的某些字段更換樣式,完整的demo就不寫了,大家應(yīng)該都能看懂吧。
//將第一個分組匹配的內(nèi)容替換掉
//為什么要分組? 因?yàn)槲覀儾幌虢o"個"這個字添加樣式,但是又需要用"個"來判斷,我們只更改"個"前面的數(shù)字的樣式,不更改其他數(shù)字。
var str = "第1點(diǎn),這里有4個橘子,5個橙子,9個蘋果,我們需要為這幾個數(shù)量更改樣式.";
str.replace(/(d)個/g,function(match,$1,index,origin){
console.log(match,$1);
return ""+$1+"個";
})
//需要注意的是,這個回調(diào)函數(shù)的return值會覆蓋match的值,因此要在return的時候加回"個"字。
ok~應(yīng)該足夠清楚了吧~
雖然標(biāo)題是29.22分鐘,但是看完兩篇文章好像就不止了。
我不管,30分鐘內(nèi)沒看完的好好檢討下自己,是不是沒有戴眼鏡,是不是沒睡好覺,看那么慢呢!
如果有建議或者意見,請在評論區(qū)指出,非常感謝~
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/99425.html
摘要:而在下,僅僅是喜歡這個數(shù)字,如是而已正則表達(dá)式正則表達(dá)式,又稱規(guī)則表達(dá)式。對象在爪洼死苦瑞特中,對象表示正則表達(dá)式,它是對字符串執(zhí)行模式匹配的強(qiáng)大工具。序列匹配,而則匹配。否則,將視為一個原義的字符。注意正則表達(dá)式會匹配全角空格符。 寫在最前面 看到標(biāo)題你可能會疑惑為什么不是30分鐘?因?yàn)槲疫@個文章圖文并茂,非??植溃值?,其實(shí)你不用30分鐘就可以看懂。你可能會以為我在吹牛B,但是當(dāng)你...
摘要:正則表達(dá)式使用單個字符串來描述匹配一系列匹配某個句法規(guī)則的字符串。接下來,是在手機(jī)正則里面已經(jīng)出現(xiàn)了。序列匹配而則匹配。分組與反向引用分組,又稱為子表達(dá)式。把正則表達(dá)式拆分成小表達(dá)式。 本文轉(zhuǎn)載自網(wǎng)絡(luò)。轉(zhuǎn)載編輯過程中,可能有遺漏或錯誤,請以原文為準(zhǔn)。原文作者:水墨寒湘原文鏈接:https://juejin.im/post/582dfc... 正則表達(dá)式對于我來說一直像黑暗魔法一樣的存...
摘要:今天來和大家分享下,我這段時間做接口測試的一些心得。接口測試就我目前的理解,大部分情況下,接口測試,就是按照接口測試文檔,輸入相應(yīng)的請求,看能否得到文檔上所寫的接口返回消息。這一過程,稱之為接口測試,如果沒有返回相應(yīng)的信息,說明有了。 大家好,我是好學(xué)的小師弟。今天來和大家分享下,我這段時間...
摘要:周末是時隔兩月的家人團(tuán)聚,而每次內(nèi)容的準(zhǔn)備平均需要我集中精力工作小時,所以第期的內(nèi)容今早才準(zhǔn)備好,對不住大家了。下面是本周精選內(nèi)容,請享用。本文作者王仕軍,商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。 showImg(https://segmentfault.com/img/remote/1460000009742537?w=1240&h=509); 周末是時隔兩月的家人團(tuán)聚,而...
摘要:最全的配置大全,我已經(jīng)加了詳細(xì)中文注釋,只需要找到自己想要的配置就可以了,強(qiáng)烈建議收藏用法非常簡單,找到下的添加對象即可比如我要把規(guī)則原本單引號要變?yōu)殡p引號,那加上注意這個規(guī)則如果違反了規(guī)則情況下,這里的數(shù)字表示不不處理,表示警告,表示錯誤 最全的eslint配置大全,我已經(jīng)加了詳細(xì)中文注釋,只需要找到自己想要的配置就可以了,強(qiáng)烈建議收藏! 用法非常簡單,找到.eslintrc.js下...
閱讀 2116·2021-11-24 09:39
閱讀 1602·2021-10-11 10:59
閱讀 2533·2021-09-24 10:28
閱讀 3409·2021-09-08 09:45
閱讀 1298·2021-09-07 10:06
閱讀 1699·2019-08-30 15:53
閱讀 2105·2019-08-30 15:53
閱讀 1443·2019-08-30 15:53