常用正則表達式
包含中文的(也可以用於排除、不包含中文)的正則表達式:
1 //字符串是否包含中文 []表示匹配方括號的中任意字符,\u4e00是Unicode中漢字的開始,\u9fa5則是Unicode中漢字的結束 2 var regExp1 = /[\u4e00-\u9fa5]/; 3 var str1 = '23dasd哦'; 4 console.log(regExp1.test(str1)); //返回true,包含中文
驗證郵箱地址的正則表達式:
1 //郵箱地址驗證 2 //正則解讀:^[A-Za-z\d]表示以英文字母或數字開始,“+”表示匹配前面一個表達式1次或者多次,等價於 {1,}。 3 // ([-_.][A-Za-z\d]+)表示接着中間可以有“-”,“_”,“.”,然后是字母或數字,接下來的“*”表示匹配前一個表達式(就是括號中的匹配)零次或多次 4 //接着匹配郵箱必有的“@”,接下來的([A-Za-z\d]+[-.])匹配字符加數字后跟“-”或“.”,比如@163.com中的163. , 5 // 最后的[A-Za-z\d]{2,4}$中,“$”表示匹配輸入的結束{2,4}表示匹配前面的字符至少2次,最多4次,簡單來說就是域名,比如.com中的com,.cn中的cn 6 var regExp2 = /^[A-Za-z\d]+([-_.][A-Za-z\d]+)*@([A-Za-z\d]+[-.])+[A-Za-z\d]{2,4}$/; 7 var str2 = 'mader_mader@qq.vip.com'; 8 console.log(regExp2.test(str2)); //返回true,郵箱地址正確
包含且只包含數字+字母的正則表達式:
1 //8到16位英文+數字的密碼驗證 2 //正則解讀:(?![0-9]+$)表示該位置以后不全是數字,(?![a-zA-Z]+$)表示該位置以后不全是字母 3 var regExp3 = /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,16}$/; 4 var str3 = 'sdf3255521243'; 5 console.log(regExp3.test(str3)); //返回true
匹配含有未知特殊字符的字符串(含需要轉義的字符),找了很久沒找到類似的例子,只好自己想個笨的,如果你知道有更好的,請留言,不吝賜教。
應用場景:鏈接添加a標簽, 搜索聯想詞高亮
1 //str(要特殊處理的內容):有可能來自用戶輸入,有可能來自接口返回的聯想詞,所以不清楚是否含有需要轉義的字符,如"www.baidu.com?keyword='cnblog'" 2 var str = "www.baidu.com?keyword='cnblog'"; 3 var reg1 = /(.)/g; 4 //這里將原字符串的每一個字符用“[]”包裹起來,利用[]里的特殊字符不用轉義 5 var str1 = str.replace(reg1, '[$1]'); 6 var reg2 = new RegExp(str1, "g"); 7 //str2:含有str的字符串,如“鏈接:www.baidu.com?keyword='cnblog'” 8 var str2 = “鏈接:www.baidu.com?keyword='cnblog'”; 9 str2 = str2.replace(reg2, '<u style="color:red">' + str + '</u>');
獲取url參數的值:
1 //以百度搜索為例 2 var url = 'https://www.baidu.com/s?ie=UTF-8&wd=丿浮生若夢'; 3 //匹配“?”或“&”開頭,“wd=”(wd為要匹配的參數名),“([^&]*)”匹配非&的多個字符,以&結尾或整個字符串的結尾 4 var reg = new RegExp("(\\?|&)wd=([^&]*)(&|$)"); 5 //window.location.search獲得的是url問號(包括問號)后面的字符串 6 var arr = window.location.search.match(reg); //arr[2]為所求參數值(正則第二個括號匹配的值) arr[0]為整個字符串 7 //如果參數值可能是中文,用decodeURIComponent進行解碼 8 console.log(decodeURIComponent(arr[2]));