Javascript高级程序设计——9.正则表达式(2) 电玩女神 2022-07-14 05:55 95阅读 0赞 1、exec返回数组 (1)字符串 var pattern=/^[a-z]+\s[0-9]{4}$/; var str='google 2012'; alert(pattern.exec(str)); //返回一个包含字符串的数组; (2)字母 a、第一种 var pattern=/^[a-z]+/; //只匹配到字母; var str='google 2012'; alert(pattern.exec(str)); //只返回google的字符串数组 b、第二种 var pattern=/^([a-z]+)\s([0-9]{4})$/; //使用了分组; var str='google 2012'; var a=pattern.exec(str); //alert(a.length); //3 alert(a[0]); //返回匹配的整个字符串; alert(a[1]); //返回匹配到的第一个分组字符串; alert(a[2]); //返回匹配到的第二个分组的字符串; (3)捕获型分组、非捕获性分组 var pattern=/(\d+)([a-z])/; //捕获性分组,所有分组都捕获返回; var str='123abc'; var a=pattern.exec(str); 结果:a\[0\]——123a a\[1\]——123 a\[2\]——a 非捕获性分组:只要在不需要捕获返回的分组前边加?: var pattern=/(\d+)(?:[a-z])/; //捕获性分组,所有分组都捕获返回; var str='123abc'; var a=pattern.exec(str); (4)嵌套分组——从外往内依次获取,以“?”分隔开来 var pattern=/(a?(b?(c?)))/; //嵌套分组,从外往内获取; var str='123abc'; alert(pattern.exec(str)); 结果:第一步——a\[0\]:整个字符串abc 第二步——a\[1\]:匹配到第一个分组(a?(b?(c?)))abc 第三步——a\[2\]:匹配到第二个分组(b?(c?))bc 第三步——a\[3\]:匹配到第三个分组(c?)c (5)前瞻性捕获——表示获取字符串前边的,以“?=”连接 var pattern=/goo(?=gle)/; //goo后边必须是gle才会返回goo,这里的返回是“goo”,而不是“google” var str='google'; alert(pattern.exec(str)); 结果:返回了goo (6)转义特殊字符“\\” 注意:只有用“\\”转义正则表达式中特殊字符才能访问 var pattern=/\[g; //goo后边必须是gle才会返回goo,这里的返回是“goo”,而不是“google” var str='google'; alert(pattern.test(str)); (7)换行模式 var pattern=/^\d+/g; //启动了换行模式,同时限制了首 var str='1.baidu\n2.google\n3.bing'; alert(str.replace(pattern,'#')); //用“#”代替“1/2/3” 结果:\#baidu \#google \#bing 2、常用的正则 (1)检查电子邮政编码 var pattern=/[1-9][0-9]{5}/; //正则模式——第一位不可为0,后五位0-9(不需要考虑首尾) var str='223444'; //必须是6位,数字,第一位不能为0; //var str='This is 223444'!; alert(pattern.test(str)); //true; (2)检查文件压缩包 //文件名.扩展名 var pattern=/^[\w]+\.(zip|gz|rar)$/; //“|”选择符必须用分组符号包含;“\w+”匹配字符串,加上“^”来限定首字符开始匹配; //先定义一个压缩包; var str='23.zip'; //扩展名为zip,gz,rar alert(pattern.test(str)); //返回true (3)删除多余的空格 var pattern=/^\s/g; //g必须全局,才能全部匹配; var str='11 22 33'; var result=str.replace(pattern,''); //把空格匹配为无空格; alert(result); 结果:返回“112233” 注意:若无“/g”表示全局,则会显示“1122 33”,职匹配了开头 (4)删除首尾空格 a、开头+结尾空格分别删除(以空格代替) 先匹配开头:从头开始(^)匹配——“\\s” 再匹配结尾:结尾($) var pattern=/^\s/+; //“^”表示开头匹配,且“\s”只匹配了第一个,加一个“+”匹配所有; var str=' goo gle '; var result=str.replace(pattern,''); //把空格匹配为无空格; pattern=/\s+$/; //匹配结尾; result=result.replace(''); //用无空格代替; alert(result); 结果:“goo gle”(只删除了首尾,未删除中间的空格) b、采用贪婪模式(.+)、非贪婪模式惰性模式(.+?) (注意:惰性模式避免全部删除,贪婪模式会全部删除) var pattern=/^\s/+(.+?)\s+$/; //“^”表示开头匹配,且“\s”只匹配了第一个,加一个“+”匹配所有; var str=' goo gle '; var result=pattern.exec(str)[1]; alert('|'+result+'|'); 结果:“goo gle” c、使用分组获取 var pattern=/^\s/+(.+?)\s+$/; //“^”表示开头匹配,且“\s”只匹配了第一个,加一个“+”匹配所有; var str=' goo gle '; var result=str.replace(pattern,'$1'); //使用分组,$1模式 alert('|'+result+'|'); 结果:“goo gle” (5)验证电子邮件(简单的电子邮件验证) var pattern=/([\w\.\-])@(\w\-)\.(a-zA-Z){2,4}/; //整体分组,开头表示可以放a-z,A-Z,0-9,“.”或“-”,从头匹配(^) var str='yc23.com@gmail.com'; alert(pattern.test(str)); 结果:true
还没有评论,来说两句吧...