JS正则表达式知识点

  1. 通常使用字面量/创建,例如:/^1\d{10}$/.test(17355476130),但如果含有变量,使用new RegExp(str,mode)创建
  2. 正则|中竖线不是匹配单个字符,而是匹配两边的表达式,可以使用()限定范围
  3. 原子表[],代表匹配中括号中的任意一个字符,如匹配字母[a-zA-Z]
  4. 原子组(),可以理解为一个整体的表达式
  5. 字符串中'\d'==='d',\\d才代表\d
  6. \1代表第一个原子组
  7. 中括号中.就是点,+就是加,()就是括号,\.也是点
  8. ^$分别代表匹配的起始和结束位置
  9. ^也代表非,例如:/[\^\d]/.test("a")
  10. 模式修饰
    • i:不区分大小写
    • g:全局匹配
    • .:不包括\n,可以使用模式修饰\s忽略换行,让.也有换行
    • m:将每一行单独处理,每一行都是一个独立的部分和正则匹配
    • u :使用编码
  11. 元字符
    • \d,\D:[0-9],[^0-9]
    • \w,\W:[A-Za-z0-9_],[^A-Za-z0-9_]
    • \s,\S:[\n\f\r\t\v],[^\n\f\r\t\v]
    • [\s\S],[\d\D]等代表匹配所有字符
    • \b,\B:单词边界,非单词边
  12. 空格和普通字符一样可以直接使用空格\ \,也可以用\s,但\s会包含换行符
  13. 重复匹配,匹配的是前面的单个字符或组
    1. *,+,?:0-n,1-n,0-1
    2. {n},{n,},{n,m}:n,n-,n-m
  14. *?,+?,??,{n,m}?,{n,}? 会禁止贪婪匹配
  15. 匹配中文的方法:/\p{sc=Han}+/gu或者/[\u4e00-\u9fa5]+/g
  16. \t代表制表位tab\n代表换行,可以直接使用/\n/g
  17. 如果希望参与匹配但并不参与分组,可以使用(?:
  18. 断言,可以理解为匹配的条件,即不参与匹配也不参与分组
    1. x(?=exp) 零宽先行断言,x的后面必须出现exp
    2. (?<=exp)x 零宽后行断言,x的前面必须出现exp
    3. x(?!exp) 零宽负向先行断言,x的后面不能出现exp
    4. (?<!exp)x 零宽负向后行断言,x的前面不能出现exp
  19. 字符串方法(参数均可为正则或字符串)
    1. search:返回匹配的位置。
    2. match非全局会返回细节,否则返回数组,使用matchAll或者exec可以实现批量匹配细节,eg:[..."123".matchAll(/\d/g)]
    3. split 可以使用字符串或者正则分割字符串。
    4. replace 替换操作,可以替换为$,本身,左,右,N,还可以使用回调函数,以此参数为match子串,匹配项$n,偏移量offset,原字符串string。使用replaceAll可以实现批量替换。
    console.log("张三出生2000年6月,今年22岁了".search(/\d+/))
    // 输出:4
    console.log("张三出生2000年6月,今年22岁了".match(/\d+/))
    // 输出:['2000', index: 4, input: '张三出生2000年6月,今年22岁了', groups: undefined]
    console.log("张三出生2000年6月,今年22岁了".match(/\d+/g))
    // 输出:['2000', '6', '22']
    console.log("张三出生2000年6月,今年22岁了".split(/\d+/))
    // 输出:"张三出生2000年6月,今年22岁了".split(/\d+/)
    console.log("张三出生2000年6月,今年22岁了".replace(/\d+/,"*"))
    // 输出:'张三出生*年6月,今年22岁了'
    console.log("张三出生2000年6月,今年22岁了".replace(/\d+/g,""))
    // 输出:'张三出生*年*月,今年*岁了'
    console.log("张三出生2000年6月,今年22岁了".replace("0","*"))
    // 输出:'张三出生2*00年6月,今年22岁了'
    console.log("张三出生2000年6月,今年22岁了".replaceAll("0","*"))
    // 输出:'张三出生2***年6月,今年22岁了'
    
  20. 正则方法
    1. test: 检测一个字符串是否匹配某个模式,匹配则返回ture,不匹配则返回false
    2. exec:类似match,可以循环调用直到匹配结果为空结束(如此反复),通过lastIndex可以改变匹配起始位置,一定要在全局匹配模式下使用
    console.log(/^\d{11}$/.test(12345678910)) //匹配手机号,输出:true
    console.log(/^\d{11}$/.test("12345678910")) //匹配手机号,输出:true
    
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

信息技术王凤龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值