正则表达式的用法和常用实例【2】
常用正则表达式
包含中文的(也可以用于排除、不包含中文)的正则表达式:
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]));
彼岸花开开彼岸,
奈何桥前可奈何。
望乡台下忘川水,
三生石边卖孟婆。
涅槃同魔魔恋相,
浮生若梦梦蹉跎。
唯有余生舞日月,
白驹过隙大风歌。