参考:
http://www.runoob.com/regexp/regexp-syntax.html 菜鸟教程
http://www.jb51.net/article/76901.htm 汇总的正则
设置规则,让计算机根据规则去寻找相应的东西。
定义正则两种方式:var a = new RegExp(“a”) 和 var a = /a/
正则常用方法(4个):
test:查找符合正则的内容,返回true
var str = ‘1111’;
var re = /\D/;//非数字。注意这里没有引号!!!
re.test(str) === false //用re规则来验证str中是否有非数字
search:查找符合正则的内容,返回出现的位置index
str.search(re) //注意写法,和test方法不同
再比如查找字符串中是否有字母b,则re = /B/i(i意味着不区分大小写)
我们可以进一步总结,无非是普通字母和加了反斜线的转义字母这两种。
match:查找符合正则的内容,成功返回内容数组。
str.match(/s/) 即查找str中的s并返回s
当然正常用法还是str.match(/\d+/g)。
此处以str = ‘ha123ha12’做一个区分:
/\d+/g [123,12]
/\d/g [1,2,3,1,2]
/\d+/ [“123”, index: 2, input: “ha123ha12”]
/\d/ [“1”, index: 2, input: “ha123ha12”]
故g表示搜索完整个字符串才停止;+表示每次匹配的不止一个,连续匹配
replace:查找替换
str.replace(正则,新字符串/回调函数)
回调函数的目的也是返回替换后的字符,只是可以针对不同的部分返回不同。
str = ‘123ss123aa’ //ss和aa替换成
str.replace(/ss|aa/g,’‘) //“123123“
但显然我希望的是每个字母均替换为
故str.replace(/ss|aa/g,function(str){
console.log(str) //ss aa 这里要注意!
//接下来就是用来替换咯
var result = ‘’;
for(var i = 0;i<str.length;i++){
result += ‘‘
}
return result;
})
实际就是先返回俩替换了ss,再返回俩替换了aa。
正则字符
插入常用规则介绍:
\d(数字) \D(非数字) \s(空格) \S(非空格) \w(字符:字母数字下划线) \W(非字符)
| (或,比如/ss|sa/)
^:[^a]排除a ^[a]首位,比如^[1-9]即首位是1-9
$:正则最后,代表结束
\d{4,11}:4-11个数字
+、、?:表示出现在其前面的字符分别可以出现 最少一次、无所谓次数、最多一次
查找这些特殊字符时要注意转义,即/\*/这才是**
QQ号(首位不为0,至少5位数):
/^[1-9]\d{4,11}$/.test(inputQQ)
去空格:
所有空格 str.replace(/\s/g,””)
两头空格 str.replace(/^\s|\s*$/g,””) 以及 trim
左or右空格 上面选一个就好
查找连续的单词:
I love love you,删除一个love
str.replace(/\b([a-z]+) \1\b/ig)
\1是为了重复前面一次 \b是确认字符和空格的边界
其他常用校验:
匹配中文:[\u4e00-\u9fa5] //中文ACALL码的范围
Email:^\w+@[a-z0-9]+(.[a-z]+){1,3}$
//起始至少为一个字符(\w字母,数字或者下划线),然后匹配@,接着为任意个字母或者数字,.代表真正的点,.后面为至少一个的字符(a-z),同时这个(比如.com)整体为一个子项作为结束,可以出现1-3次。因为有的邮箱是这样的.cn.net。(xxxx.@qq.com xxxx.@163.com xxxx.@16.cn.net )
网址:[a-zA-z]+://[^\s]* http://……
//匹配不分大小写的任意字母,接着是//,后面是非空格的任意字符
邮政编码:[1-9]\d{5} //起始数字不能为0,然后是5个数字
身份证:[1-9]\d{14}|[1-9]\d{17}|[1-9]\d{16}x
另:多个校验直接正则对象,re={
email:/^\w+@[a-z0-9]+(.[a-z]+){1,3}$/,
number:/\d+/
}