關於RegExp的一些使用的練習,配上合理註釋(直接貼Demo程式碼)
阿新 • • 發佈:2018-11-22
<!DOCTYPE html> <html> <head> <title>title</title> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport"> <script src="jquery.min.js"></script> <script src="bootstrap.min.js"></script> <script src="vue.min.js"></script> </head> <body> <div id="app"> <input type="text" v-model="x"> <input type="button" value="驗證" @click="validate"> </div> <script> var vm = new Vue({ el: '#app', data:{ x: '100000000' }, methods: { validate: function(){ } } }); //常用方法://reg.test(str); //str.match(reg); 返回匹配完的結果字串 //參考文件W3CSchool:http://www.w3school.com.cn/jsref/jsref_obj_regexp.asp //原則:預設是貪婪匹配(匹配出的字串即最長匹配子串) var reg1 = /abc/; //查詢模式串'abc' var reg2 = new RegExp("abc"); var reg3 = new RegExp(reg2); //建立Reg2的副本給Reg3 var reg4 = RegExp(reg2); //直接把reg4指向reg2,操作reg4等於直接操作reg2 var reg5 = /abc/i; //執行對大小寫不敏感的匹配 var reg6 = /abc/g; //執行全域性匹配,在查詢到第一個後不會停止 var reg7 = /abc/m; //執行多行匹配,當待匹配字串具有換行符\n時,能夠進行多行匹配 var reg8 = /[0-9][0-9][0-9]/g; //匹配連續三位是任意數字的字串,查詢到一個以後不會停止 var reg9 = /[0-9A-z][cd][d]/g; //匹配出的字串第一位是任意數字或字母,第二位是c或d,第三位是d,併為全域性匹配 var reg10 = /[^a]/; //匹配第一個非a的字串 var reg11 = /[a|b]/; //匹配第一個a或b的字串 var reg12 = /(abc|bcd)[0-9]/; //匹配第一個abc+任意數字或bcd+任意數字 var reg13 = /\w/; // \w等價於:[0-9A-z_] // \W等價於:^\w var reg14 = /\d/; // \d等價於:[0-9] var reg15 = /[\w\d]/; //可以在表示式寫元字元!! // \s等價於:[\n\t\f\r\v ] 換行符+換頁符+回車符+製表符+垂直製表符+空格 var reg16 = /\bc/; //表示C作為單詞邊界,且是單詞頭部 var reg17 = /\u597d/; //Unicode編碼也能匹配漢字 \u597d:好 var reg18 = /\w{2,}/g; //匹配所有任意2個以上任意字元 var GoogleEmailValidate = /[\s\S]*@gmail.com/; //判斷是否是谷歌郵箱的字串 var reg19 = /(\w)\1\1\1/; // 小括號內是子表示式,而\1指引用第一個子表示式的內容(反向引用) // 整個表示式意思是:字串以xxxx(x為任意字元)的形式匹配 // Tip:子表示式匹配的內容會出現在結果陣列中,可以當陣列使,前提是不是全域性匹配! // 關於split方法,如果含有子表示式,則結果陣列中保留分割條件字元,否則分割條件字元不保留 // 關於replace方法,如果引數不是正則表示式,則替換不是全域性替換,若是全域性的正則表示式匹配,才會進行全域性替換 // str.replace(new RegExp('/(\w)\1(\w)\2/'), "$2$2$1$1") $1$2是反向引用了前面表示式中的子表示式 // 將the-first-name變為駝峰命名theFirstName,原理是將'-f'替換為'F' // var reg = /-(\w)/g; /* str.replace(reg, function($, $1){ return $1.toUpperCase(); }) function是匹配一次執行一次,若是全域性匹配,則會執行一到多次 */ //正向斷言: var reg20 = /a(?=b)/g; //匹配任何出現在b之前的a,但不包括b //調整為非貪婪匹配 var reg21 = /a*?/g; //包含任意多個a的子串,但'?'表示用非貪婪方式(匹配出的子串能少則少),最後匹配到多個空字串 //字串去重 // var reg = /(\w)\1*/g; /* str.replace(reg, "$1"); */ //2014百度題:將表示金額的字串替換成:100.000.000的形式; //var reg = /(?=(\B)(\d{3})+$)/g; 匹配出:\d{3}+ 以3為個數的倍數的一個或多個數字 // $ 結尾的 // \B 非單詞邊界 防止出現.100.000.000 // ?=n 緊跟 //組合成:匹配 緊跟 以3為個數的倍數的一個或多個數字結尾的 且是 非單詞邊界的 空字串 //str.replace(reg, "."); </script> </body> </html>
參考文件註釋中有,就是W3CSchool的官方文件,感興趣的朋友可以測一測玩玩,感受一哈RegExp的強大,最後一個百度面試題當時號稱史上最難,我沒測出來,希望瞭解的朋友提點一下我,謝謝了...