每次要用正则,第一想法就是先网上搜索有没有现成的表达式,然后再去看相关的正则规则。没有自己的理解,也不方便查阅。这两天网上看了一些相关的技术贴,总结以下一些常用的语法规则。
一、正则常用规则
1. 元字符(代表单词的开头或结尾、也就是单词的分界处。元字符中字母大写都表示反义)
元字符 | 定义 | 案例 |
匹配单词的开始或结束 | /hi/ hi(匹配成功) history(匹配失败) | |
. | 匹配换行符以外的任意字符 | |
* | 匹配数量,重复任意次(包括0) | |
+ | 匹配数量,重复0次或多次 | |
? | 匹配数量,重复0次或1次 | |
d | 匹配一位数字 | |
s | 匹配任意的空白字符(空格、制表符(Tab)、换行符等) | |
w | 匹配字母或数字或下划线( 等同于[A-Za-z0-9_] ) | |
^和$ | 匹配字符串的开始和结束 | /^[1-9]{5,12}$/ 123456(匹配成功) a123456(匹配失败) |
注意:如果需要匹配跟元字符相同的字符,需要使用使用转义符"" 。 如:匹配"." : .
2. 分支条件(|:类似于逻辑或,匹配时要注意表达式的顺序。)
例:匹配11位的手机号或者是带4位区号的座机号。
var reg = /^1d{10}|0d{3}-d{8}$/ ;
3. 分组(():此时的括号表示分组的符号,不是元字符“(”,不需要转义)
例:匹配有效IP。
var reg = /^((2[0-4]d|25[0-5]|[01]?dd?).){3}(2[0-4]d|25[0-5]|[01]?dd?)$/ ;
// (2[0-4]d|25[0-5]|[01]?dd?).){3} : 三位数或两位数的有效IP匹配三次 , 并且每个段位的ip后面连接小数点 . (元字符,需要转义) 。
二、正则的定义
1. var reg = new RegExp("d") ; // 当正则中需要用到变量的时候,则只能使用这种方式,否则会被当成字符串进行匹配
2. var reg = /d/ ;
三、正则的调用
1. test() : 匹配成功返回true ,失败false 正则.test(字符串)
2. search() : 返回符合匹配规则的第一个字母的位置 字符串.search(正则)
3. match() : 返回符合匹配规则的内容的数组 字符串.match(正则)
4. replace() : 查找符合正则的内容,并将其替换成对应的字符串
返回替换之后的内容 字符串.replace(正则,新的字符串/回调函数)
5. exec() : 同match
四、正则实例
1. 找重复项最多的字符个数
var str = "skdjkajkkkkkasapoerweriuruqo" ; var arr = str.split(""); // 把字符串转换成数组 str = arr.sort().join("") ; // 数组进行排序再连接成字符串 console.log( str ); // aaadeeijjkkkkkkkoopqrrrssuuw var value = "" ; var index = 0 ; var reg = /(w)1+/g ; str.replace( reg , function($0,$1){ console.log( $0 ); // aaa ee jj kkkkkkk oo rrr ss uu 每次匹配成功的结果 console.log( $1 ); // a e j k o r s u 每次匹配成功的结果中的第一个子项 if( index<$0.length ){ index = $0.length ; value = $1 ; }}); console.log("重复字数最多的是:"+value+",重复次数为"+index +"次"); //重复字数最多的是:k,重复次数为7次
2. 匹配邮箱
var reg = /^w+@[a-z0-9]+(.[a-z]+){1,3}$/ ; var str = "18273465468@163.com" ; console.log( reg.test(str) ); // true
借鉴博客地址:
1. http://www.cnblogs.com/deerchao/archive/2006/08/24/zhengzhe30fengzhongjiaocheng.html
2. http://www.cnblogs.com/moqing/p/5665126.html