正则表达式就是按照某种规则匹配字符串
例子:
\d 数字 {4}表示重复四次 \b代表单词边界
+匹配一个或多个 字符
*匹配任意个字符
.表示任意字符
?0个或1个分支
如对日期进行匹配
2018/03/17 、2018-03-17
^ \d{4} [/ -] \d{2} [\ -] \d{2} $
^表示开始,$表示结束 []表示“或”的关系,[/ -]表示可以是/也可以是-
比如日期换成03/17/2018,需要对其进行分组
^ (\d{4}) [/ -]( \d{2}) [\ -] (\d{2}) $
使用语句$2-$3-$1 替换为03/17/2018
元字符:在正则表达式中有特殊含义的非字母字符,如\b表示单词边界
如果需要匹配横线,则在范围后面加一个-即可
例:
(1)验证手机号
var reg=/((13||15||17||18)\d{ 9})$/;reg.test(str);//true or false
(2)验证邮箱
var reg1=/^([A-Za-z0-9_\.\-]+@[A-Za-z0-9_\.\-]+(\.[A-Za-z0-9]{ 2,4})+)$/;\\第一部分内容是数字、字母、下划线、点、减号(一个或多个)\\第二部分是:@\\第三部分内容是数字、字母、下划线、点、减号(一个或多个)\\第四部分是 .com.cn(有一个或多个),点后面的字符由2个到4个组成reg1.test(str);//true or false
(3)用js实现千位分隔符
法一:普通做法
function formatNum(num){ var str=num+''; var j=1; var res=''; for(var i=str.length-1;i>=0;i--){ if(j%3==0&&i!=0){ res+=str[i]+','; } else{ res+=str[i]; } j++; } res=res.split('').reverse().join(''); console.log(res); }formatNum(34782632);//‘34,782,632’
法二:正则
function formatNum(num){ var str=num+''; var reg=/\d{ 1,3}(?=(\d{ 3})+$)/g; console.log(str.replace(reg,'$&,')); }formatNum(34782632);
正则表达式\d{1,3}(?=(\d{3})+$) 表示前面有1~3个数字,后面的至少由一组3个数字结尾。
?=表示正向引用,可以作为匹配条件,但是匹配到的内容不获取,并且作为下一次查询的开始。
$&表示与正则表达式相匹配的内容