js正则表达式基础知识

什么是正则

1.正则只能用来处理字符串
2.处理一般包含两方面:
A:验证当前字符串是否符合某个规则 “正则匹配”
B:把一个字符串中符合规则的字符获取到 “正则捕获”
C:学习正则其实就是在学习如何编写规则,每一个正则都是由修饰符,“元字符””两部分组成

创建正则

.正则两个斜杠之间包起来的都是“元字符”,斜杠后面出现的都是“修饰符

 
 let reg=/[a-z]/igm  //=>字面量方式创建           
 let reg=new RegExp("[a-z]","igm")  //构造函方式创建
 
常用的元字符和修饰符
  • 常用的修饰符

  • i:ignoreCase 忽略大写小匹配

  • m:multiline 多行匹配

  • g:global 全局匹配

  • 常用的元字符

  • [特殊元字符]

  • \d  0~9之间的一个数字
    
  • \D  非0~9之间的任意字符
    
  • \w  “数字、字母、下划线”中的任意一个 =>/[0-9a-zA-Z_]/等价于\w
    
  • \s  匹配任意一个空白字符(包括\t制表符[TAB键四个空格])
    
  • \b  匹配边界符  'zhu'(z左边和u右边就是边界)  'zhu-feng'(z左边、u右边、f左边、g右边是边界)
    
  • \n  匹配一个换行符
    
  • \  转义字符(把一个普通字符转义为特殊的字符,例如:\d,把有特殊含义的转换为普通意思,例如:\. 此处的点就不是任意字符,而是一个小数点)
    
  • . 不仅仅是小数点,代表除了\n以外的任意字符
    
  • ^  以某个元字符开头
    
  • $  以某个元字符结尾
    
  • x|y  x或者y中的任意一个(a|z...)
    
  • [xyz] x或者y或者z中的任意一个
    
  • [^xyz] 除了x\y\z以外的任意字符
    
  • [a-z] 获取a-z中的任意一个字符([0-9] 等价于\d ...)
    
  • [^a-z] 除了a-z的任意字符
    
  • ()  正则分组
    
  • (?:) 当前分组只匹配不捕获
    
  • (?=) 正向预查
    
  • (?!) 负向预查
    
  • ...
    
  • [量词元字符:让其左边的元字符出现多少次]

  • * 出现零到多次
    
  • ? 出现零到一次
    
  • + 出现一到多次
    
  • {n} 出现N次
    
  • {n,} 出现N到多次
    
  • {n,m} 出现N到M次
    
  • [普通元字符]

  • 只要在正则中出现的元字符(在基于字面方式创建),除了特殊和有量词意义的以外,其余的都是普通元字符
    
正则中括号[] 的细节
  • 1.中括号中出现的元字符一般都是代表本身含义的
  • 2.中括号中出现的两位数,不是两位数,而是两个数字中的任意一个
let reg = /^.+$/;//=>一个正则设置了^和$,那么代表的含义其实就是只能是xxx
console.log(reg.test('n'));//=>true
console.log(reg.test('1'));//=>true
console.log(reg.test('nn'));//=>true
console.log(reg.test('\n'));//=>false

let reg = /^[.]+$/;   //代表本身含义的  .
console.log(reg.test('n'));//=>false
console.log(reg.test('1'));//=>false
console.log(reg.test('nn'));//=>false
console.log(reg.test('\n'));//=>false
console.log(reg.test('...'));//=>true

let reg = /^[\d]+$/; //=>\d在这里依然是0~9中的一个数字
console.log(reg.test('0'));//=>true
console.log(reg.test('d'));//=>false

let reg = /^[18]$/;//=>不加^和$代表字符串中只要包含xxx即可
console.log(reg.test('18'));//=>false
console.log(reg.test('1'));//=>true
console.log(reg.test('8'));//=>true

let reg = /^[12-65]$/;
console.log(reg.test('13'));//=>false 不是12~65
console.log(reg.test('7'));//=>false  这个正则的意思是 1或者2~6或者5
console.log(reg.test('3.5'));//=>false
正则小括号的特殊作用 ()
  • 1.改变的默认的优先级
  • 2.分组捕获
  • 3.分组引用
let reg = /^18|19$/;
console.log(reg.test('18'));//=>true
console.log(reg.test('19'));//=>true
console.log(reg.test('1819'));//=>true
console.log(reg.test('189'));//=>true
console.log(reg.test('181'));//=>true
console.log(reg.test('819'));//=>true
console.log(reg.test('119'));//=>true

reg = /^(18|19)$/;
console.log(reg.test('18'));//=>true
console.log(reg.test('19'));//=>true
console.log(reg.test('1819'));//=>false
console.log(reg.test('189'));//=>false
console.log(reg.test('181'));//=>false
console.log(reg.test('819'));//=>false
console.log(reg.test('119'));//=>false

let reg = /^([a-z])([a-z])\2\1$/;//=>正则中出现的\1代表和第一个分组出现一模一样的内容...
console.log(reg.test('oppo'));
console.log(reg.test('poop'));

=>编写一个正则匹配身份证号码
let reg = /^\d{17}(\d|X)$/;//=>简单:只能匹配是否符合格式,不能提取出身份证中的一些信息
'130828199012040617'
=>130828 地域
=>19901204 出生年月
=>0617 倒数第二位:奇数=男  偶数=
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值