一、正则表达式的创建方式
方式1:/正则表达式/模式 重点掌握
var regx=/[a-z]/; var regx=/^[a-z]$/; var regx=/^[a-z0-9]+$/i; var regx=/^[a-z]{3}$/i; var regx=/\b[a-z]{3}\b/g; var regx=/\b[a-z]{3}\b/ig;
注意:不需要双引号括起来;两种模式(i--忽略大小写模式、g--全局模式)
方式2:new RegExp("正则表达式",模式); 了解即可
var regx=new RegExp("[a-z]","i");
二、正则表达式对象常用的方法
2.1 test()
功能:使用正则对象去匹配字符串 ,如果匹配成功返回ture,否则返回false。
例1 需求:匹配一个字符
var regx=/[a-z]/;//定义规则(不用用双引号括起来)(1) // var regx=/^[a-z]$/;//定义规则(不用用双引号括起来)(2) // var regx=/^[a-z0-9]+$/i;//定义规则(不用用双引号括起来)(3) // var regx=/^[a-z]{3}$/i;//定义规则(不用用双引号括起来)(4) // var regx=/\b[a-z]{3}\b/g;//定义规则(不用用双引号括起来)(5) // var regx=/\b[a-z]{3}\b/ig;//定义规则(不用用双引号括起来)(6) var st="heLlo123 ni hao ma ";//待测数据 var result=regx.test(st);//校验 alert(result);//true // 分析:它会在字符串内找,找到符合规则的,就会结束. // 解决办法:添加(),此时才是佩服一个英文小写字符 // 练习:不区分大小写--+(0个或多个){4}(匹配四个字符)
说明:在(1)的测试结果是true,分析原因:由于没有边界符,当匹配到的时候就会立即返回,同时返回true,如果不匹配就继续
向下查询,如果查找最后,没有查询到则返回false。
解决思路:采用(2)的方式进行匹配,此时才是匹配一个小写的字符(判断要匹配的内容是否是以小写字符开头的字符)
补充:其它方式(3)、(4)、(5)、(6)注意分析结果
2.2 exec()
功能:根据正则表达式去查找字符串符合规则的字符串(内容)
例2 需求:查找符合要求的单词
// var regex=/\b[a-z]{3}\b/; //(1) var regex=/\b[a-z]{3}\b/g;//(2) var str = "da jia hao ming tian xiu xi yi tian gao xing bu"; var line=null; while((line=regex.exec(str))!=null){ document.write(line+"<br />"); }
分析:(1)的使用会使程序陷入死循环,由于不是全局查询,它查询到了(此时不是null了)就停止查询了,不再向下查询,永远都
是jia。
解决办法:采用(2)加上全局参数g,查询到了输出,然后会接着往下查询,直到最后没有相匹配的,则是null。
三、字符串中关于正则表达式的方法
(1)match 找到一个或多个正则表达式的匹配;返回的是匹配的值,而不是字符串的位置
(2)replace 替换与正则表达式匹配的子串
(3)split 把字符串分割为字符串数组
//(1)功能--查找:找到一个或多个正则表达式的匹配(只要匹配到就返回) var s="abGdg".match(/[a-z]+/);//注意参数 alert(s); //(2)功能--替换:替换与正则表达式匹配的子串(这里特殊之处是去掉字符串中的数字) var s2="ab123ddddd456cccc".replace(/[0-9]+/g,"");//注意参数 alert(s2); //(3)功能--分割:把字符串分割为字符串数组 var s3="a=b=c".split("=");//注意参数 alert(s3); alert(s3.length);
四、简单应用
var str = "hello123"; var reg = /^[A-Z0-9]+$/i; //注意加上^和$(开头和结尾) alert("匹配吗?"+reg.test(str));
需求:查找出三个字符组成的单词
var str ="da jia hao hao xue xi a"; var reg = /\b[a-z]{3}\b/gi;//注意全文查找加上 g,\b表示一个单词的边界 var line =""; while((line = reg.exec(str))!=null){ document.write(line+"<br/>") }