【JS】RegExp

正则

  • 两种声明方法

    • //(推荐)
    • new RegExp()
  • 使用new RegExp()时注意:字符串会忽略掉第一个\,如需要转义等操作需要加两个\

    console.log('\d'); // d
    console.log('\\d'); // \d
    
  • 空格也是一个字符

  • 正则互不相等

  • 元字符需要转义

  • 默认情况下,匹配成功一次,就会终止匹配,lasIndex始终为0

    • 可以手动修改lastIndex的值,一个字符代表一个,来更改查询起始位置
  • 匹配一切字符(常用)

    • [\s\S]
    • [^]
    • s修饰符配合.

修饰符

  • g:会更改 lastIndex 的值,只要后面有匹配项,匹配就会一直进行

    • 与match配合返回所有结果
  • y:会更改 lastIndex 的值,匹配位置必须紧挨着,否则就停止匹配(必须连续匹配)

    • 与g和match配合返回所有结果

      'a1a2a3'.match(/a\d/y) // ["a1"]
      'a1a2a3'.match(/a\d/gy) // ["a1", "a2", "a3"]
      
  • i:忽略大小写

  • m:多行处理

    • 将一段字符串,按照换行符分为多行
    • ^$的匹配行为也会随之改变,识别多行
  • u:正确处理四个字节的UTF-16 编码,即两个 unicode 码就代表两个字符

  • s:.可以表示所有字符

属性

在这里插入图片描述


匹配规则

  • |

    • 将左右各视为整体,除非加括号()进行分割
    • (12|34):匹配12或者34
  • .

    • 匹配除空格换行外任何字符
    • s修饰符后都可以匹配
  • 边界:

    • ^ 起始
    • $ 结束
    • ^[a-z]{3,6}$:限定了整个字符串必须是3-6位的字母
  • 原子表[]

    • 只匹配[]里面的
    • 不需要加\转义
    • 排除匹配[]内第一个如果是^,则整体为反向匹配
    • 区间匹配:不能降序,如[a-z][0-9]
  • 字符类:

    • \d:匹配数字,相当于[0-9]
    • \w :匹配字母、数字和下划线,相当于[A-Za-z0-9_]
    • \s:匹配空格,换行符等,相等于[\t\r\n\v\f]
    • 大写则规则相反
  • 字符属性\P

    • 一般配合pu修饰符

    • \p{L}:匹配字母

    • \p{L}:匹配标点符号

    • \p{sc=Han}:匹配中文

  • 量词:

    • {n}表示重复n
    • {n,}表示至少重复n
    • {n,m}表示重复nm
    • ? 某个模式出现0次或1次,等同于{0, 1}
    • * 某个模式出现0次或多次,等同于{0,}
    • + 某个模式出现1次或多次,等同于{1,}
  • 贪婪模式:

    • +*会触发贪婪模式
  • 懒惰模式:

    • 加上?则会变成最小匹配
    • 使用[]配合贪婪,能实现更精确的匹配
  • ()

    • 作为分组结果,显示在匹配结果后
    • 也可以起到合并(圆括号)的效果
    • 可以通过\n来获取指定的分组
    • match下,g和分组不能结合使用,会让分组失效
    • 不记录组:(?:)分组内容不会显示,只起到圆括号的作用
    • 别名:(?<别名>)
  • 断言:if判断

    • 匹配y前的x,x(?=y)
    • 匹配不在y前的x,x(?!y)
    • 匹配在y后面的x(?<=y)x
    • 匹配不在y后面的x(?<!y)x

内置属性

  • 使用简写时,使用[]
全名简写代表的值
input$_用于搜索的字符串
lastMatch$&最后匹配的文本
lastParen$+最后匹配的捕获组
leftContext$`第n个分组
rightContext$'$ 字符
$n1~9 个捕获组
let text = "this has been a short summer";
let pattern = /(.)(hort)/g;
pattern.test(text)
console.log(RegExp.input); // this has been a short summer
console.log(RegExp.leftContext); // this has been a
console.log(RegExp.rightContext); // summer
console.log(RegExp.lastMatch); // short
console.log(RegExp.lastParen); // s
console.log(RegExp['$1']); // s
console.log(RegExp['$2']); // hort


方法

  • RegExp.test():测试模式是否匹配

  • RegExp.exec()

    • 搭配g修饰符,会记录每一次的 lastindex,可以实现循环输出,但不会一次性输出
    let str="houdunren"
    let reg=/\w/g
    while(res=reg.exec(str)){
        console.log(res);
    }
    
  • String.match

  • String.matchAll:返回匹配结果迭代器(参数很全的那个)

    • 获取所有匹配项信息
    • 必须搭配g修饰符
  • String.search:返回匹配index

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值