Javascript高级程序设计——9.正则表达式(2)

来源:互联网 发布:语音识别 算法 编辑:程序博客网 时间:2024/04/30 02:29
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);  //3alert(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,raralert(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

0 0
原创粉丝点击