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