正则表达式用于检查一个字符串是否符合规则,比如邮箱格式、电话号码格式。。。 或提取符合规则的内容
//语法
// var 变量 = new RegExp("表达式","匹配模式");
var reg = new RegExp("a");//检查字符串中是否有a,严格区分大小写
var str = "abcd";
var result = reg.test(str);
console.log(result);
匹配模式:
i:忽略大小写
g:全局模式
可同时存在没有先后
字面量创建
//这两句是一样的
var reg = /a/i;
reg = new RegExp("a","i");
与之前不同,正则表达式字面量创建虽然简单但并不灵活
常用格式
一些常用的匹配模式
var reg = /a|b/; //a或b
reg = /[ab]/; //a或b
reg = /[a-z]/; //所有小写字母
reg = /[A-z]/; //任意字母;注:a大写z小写
reg = /[0-9]/; //任意数字
reg = /a[bd]c/; //abc或adc
reg = /[^ab]/; //不含a或b
reg = /^a/; //检查开头是否有a
reg = /a$/; //检查结尾
reg = /^a$/; //完全符合^&内部条件;本例只有字符串中只有a才为true
量词
var reg =/a{3}/; //aaa
reg = /ab{3}/; //abbb
reg =/(ab){3}/;//ababab
reg = /ab{1,3}c/;//abc,abbc,abbc,都可以
//即{最低出现次数,最高出现次数}(最高可不写)
//{}仅对相邻有效,字符串需加()
字符串与正则表达
var str ="1234c5678c";
var result = str.split("c"); //根据字符拆分字符串为数组,不包含标志字符
result = str.search("c"); //返回字符第一次出现位置没有返回-1
result = str.replace("c","@_@");//替换第一个目标字符,可传入空串(即删除)
/*
结合正则表达的例子
*/
result = str.split(/[A-z]/);//根据任意字母拆分 (默认全局)
result =str.search(/[A-z]/);//检查字符串中目标首次出现位置(不支持全局)
result = str.match(/[A-z]/g);//返回字符串中符合规则字符串
//不写g(全局搜索)会只返回一个
result = str.replace(/[a-z]/g,"@");//全局替换
元字符,转义字符
有的字符(或反斜线前缀字符)有特殊含义,被称为元字符;
例如’.’(表示搜索任意字符)
在特殊字符前加反斜线表示单纯字符例如(\ .)
var reg = /./; //是否含有任意字符
reg = /\./; //是否含有.
reg = /\\/; //是否含有\(反斜线也是特殊字符)
reg = reg.replace(/^\s*/); //去除字符串前面所有空格
//^表示开头;\s表示元字符空格;*表示没有或多个(+表示一个以上)
注:构造函数与字面量不同,要多写入一个反斜线
例子
检查字符串是否为电话号码
目前我国使用的手机号码为11位,其中各段有不同的编码方向:
前3位:网络识别号 第4~7位:地区编码 第8~11位:用户号码
电话号码编码规则:
国家代码 + 地区代码 + 电话号码(服务商代码 + 4位用户号码)
固定电话由电信部门制定。
规则:以1开头,特殊部门占用第二位的012,总长度11位
即:开头为1(/^1)
第二位3-9的数字([3-9])
余下9位为0-9数字,
结
尾
限
制
长
度
(
[
0
−
9
]
9
结尾限制长度([0-9]{9}
结尾限制长度([0−9]9)
正则表达:/^1 [3-9] [0-9]{9}$/
虽然字面量传入不明显但实际//之间传入的是字符串,所以不能有空格
<script>
var phoneNu = "15344455566";
var phoneReg = /^1[3-9][0-9]{9}$/;//内部不能有空格
console.log(phoneReg.test(phoneNu));//控制台打印
</script>
字符串必须完全符合格式,因此,这段表达式不能从一个长字符串提取电话号码
检查格式是否为邮箱
登录名@主机名.域名
规则:任意字母数字下划线字符串**.**任意任意字母数字下划线(这部分通常省略)@任意字母数字.任意字母.任意字母
即:以字符串开头(长度一个以上字符)(\w+);
可有可无的二级登录名包括点和任意字符串(\ .\w+)*
@符号;
字母数字组成的主机名([A-z0-9]+);
域名例如常见的 .com .cn(\ .[A-z]{2,5}){1,2}
正则表达/\w+ (\ .\w+)*@[A-z0-9]+(\ .[A-z]{2,5}){1,2}/
这个例子还告诉我们文档注释的重要性
var email = "adcd@abc.com";
var emailReg = /\w+(\.\w+)*@[A-z0-9]+(\.[A-z]{2,5}){1,2}/;
console.log(emailReg.test(email));
去除空格
本着尽可能利用已有资源的原则str.trim()可以直接实现 我们想要的功能,但在翻过JS的String类后并没有找到这个方法,最终发现这个方法是jQuery的
var str = " hello ";
console.log(str);
str = str.replace(/\s/g,"");//全局替换全部空格为空串
//空格为特殊字符以字面量代替
console.log(str);