JavaScript之正则

正则

正则,即正确的规则,正则是用来操作字符串的规则,正则对字符串提供了三大功能,验证,查询和替换。
创建
正则的创建符号为双斜杠 / /,正则是一种对象,所以任何两个正则都不相同
var reg1 = /a/;
var reg2 = /a/;
console.log(reg1 == reg2);		//返回值为false
//=================================
验证: reg.test(str);
查询: str.search(reg) / str.match(reg);
替换: str.replace(reg,newStr);
正则的组成

元字符

  • . :匹配非换行的任意字符
  • \ :转译符号,把有意义的符号转换成没有意义的字符,把没有意义的字符转换成有意义的符号
  • \s :匹配空白字符 (空格/制表符(… )
  • \S :匹配非空白字符
  • \d:匹配数字
  • \D :匹配非数字
  • \w :匹配数字字母下划线
  • \W :匹配非数字字母下划线.
    限定符
  • *: 前一个内容重复至少 0次,也就是可以出现0 ~正无穷 次
  • + :前一个内容重复至少1次,也就是可以出现1 ~正无穷次
  • ?:前一个内容重复0或者1次,也就是可以出现0~1次
  • {n}:前一个内容重复n次,也就是必须出现n次
  • {n,} :前一个内容至少出现n次,也就是出现n ~正无穷次
  • {n,m} :前一个内容至少出现n次至多出现m次,也就是出现n ~ m次
  • 限定符是配合元字符使用的
    边界符
  • ^ :表示开头
  • $:表示结尾
  • 边界符是限定字符串的开始和结束的
    特殊符号
  • ():限定一组元素
  • []:字符集合,表示写在[]里面的任意一个都行
  • [^] :反字符集合,表示写在[^] 里面之外的任意-个都行
  • - :范围,比如a-z表示从字母a到字母z都可以
  • |:或,正则里面的或a|b表示字母a或者b都可以
    标识符
  • i : 表示忽略大小写
    这个i是写在正则的最后面的
    /\w/i
    就是在正则匹配的时候不去区分大小写
  • g : 表示全局匹配
    这个g是写在正则的最后面的
    /\w/g
    就是全局匹配字母数字下划线
验证
用到验证的地方有很多,邮箱,用户名,密码等
1
验证一串数字是不是QQ号
现在有一串数字,我想知道它可不可能是一个QQ号,首先我们需要知道QQ号的验证规则是什么,假如QQ号的验证规则是第一位数不为0,长度由5~12位组成,
那就可以这样写。先声明一个字符串来存储数字,再声明一个变量储存正则,那正则该怎么写呢,先加上一个边界符^表示开头,再看验证规则,第一位是一个不
为零的数字,就是除了0以外的1~9都可以,那就可以这样写,[1-9][]是一个字符集合,表示写在[]里面的任意一个都行,-表示范围,[1-9]意思就是第一位
数字是1~9中的就符合条件,然后再看第二个规则,长度由5~12位组成,那就可以用\d{4,11}来表示,\d是匹配数字,表示是数字就符合,{}是限定符,{4,11}
表示前一个内容至少出现4次至多出现11,也就是出现4~11次,为什么是4~11,而不是5~12呢,因为第一位我们表示过了,就是[1-9],剩下的自然就剩下
4~11位了,最后加上边界符$表示结尾。
var str = "12345678910";
var reg = /^[1-9]\d{4,11}$/;
console.log(reg.test(str));		//返回值为true
//===================================2
网址的判断,网址的写法有很多种,我们就用这几个举例,"https://www.baidu.com""http://www.baidu.com""www.baidu.com""mp3.baidu.com"
"baidu.com""baidu.com.cn""126.com"首先还是先找规则,有了规则我们才能写正则,先声明一个变量来存储正则,加上一个边界符^表示开头,从头开始看,
会发现有的网址有https有的没有,还有的是http,说明这个是可以有也可以没有的,那就可以这样写 (https?:\/\/)?()表示限定一组元素,?表示可以出
现0次或1次,()?表示()不存在或存在一次,https?表示s不存在或存在一次,再往后,发现有的有www.有的是mp3.还有的没有,那规则是什么呢,条件有限,
我们先推测规则是数字和小写字母的组合,[0-9a-z],由三位组成,{3},别忘了最后还有一个.,这个也是可以有可以没有的,所以用()?来表示,
([0-9a-z]{3}\.)?,这一点就写完了,再往下,这也是一段由数字和小写字母组成的,[0-9a-z],但是位数不确定,我们假设位数为2~9位,{2,9},
就是[0-9a-z]{2,9},这一段是必定都存在的所以不用?,这一段也完了,再往下,都有一个.com,这是一段由小写字母组成的,[a-z],位数假定伟3位,
{3},那就是\.[a-z]{3},最后一段是是.cn,是一个两位数字母,\.[a-z]{2},但是不是所有都存在的,(\.[a-z]{2})?,最后加上结束边界符。
var reg = /^(https?:\/\/)?([0-9a-z]{3}\.)?[0-9a-z]{2,9}\.[a-z]{3}(\.[a-z]{2})?$/;
查询
查询字符串中符合条件的子串,并返回成一个数组
var str = "abbccc122333abbccc122333";
console.log(str.match(/a/));		//返回值为[ "a" ],默认只会查询第一个符合的子串
console.log(str.match(/a/g));		//返回值为[ "a", "a" ],g表示全局,全局查询符合的子串
console.log(str.match(/b{2}/g));	//返回值为[ "bb", "bb" ],查询的时候也可以使用正则的符号
替换
var str = "abbccc122333";
console.log(str.replace(/b/,"哈"));		//返回值为 a哈bccc122333,默认只会替换第一个符合的子串
console.log(str.replace(/b/g,"哈"));	//返回值为 a哈哈ccc122333,g表示全局,全局替换符合的子串
console.log(str.replace(/[a-b]/g,"哈"));//返回值为哈哈哈ccc122333,替换的时候也可以使用正则的符号

ps:1.在使用正则的test方法做验证时,除非特殊要求,一般都是要加上开头^和结尾$,表示整体验证。不使用全局g
2.在使用除了test方法做查找或匹配替换操作时,一般使用全局g,找到所有内容,而不是用开头和结尾

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值