代码改变世界

正则表达式

2023-12-01 10:07  默默不语  阅读(2)  评论(0编辑  收藏  举报
  • 字符类

    字符 含义
    [xyz][a-c] 一个字符类,匹配包含在方括号中的任何字符.可以使用连字符(-)指定字符范围, 但如果连字符出现在方括号中的第一个或最后一个字符,则视为普通字符
    [^xyz][^a-c] 否定或补充字符类,匹配不包含在方括号中的任意字符.连字符作用同上
    . 匹配除行终止符之外的任何单个字符
    \d 匹配任何数字. \d = [0-9]
    \D 匹配任何非数字的字符. \D = [^0-9]
    \w 匹配任何基本拉丁字母中的字母数字下划线. \w = [A-Za-z0-9_]
    \W 匹配任何不是来自基本拉丁字母的单次字符. \W = [^A-Za-z0-9_]
    \s 匹配单个空白字符. 包括空格, 制表符,换页符等
    \S 匹配除空格以外的单个字符
    \t 匹配水平制表符
    \r 匹配回车符
    \n 匹配换行符
    \v 匹配垂直制表符
    \f 匹配换页符
    x|y 匹配 x 或 y
  • 量词

    字符 含义
    * 匹配 0 次或多次
    + 匹配 1 次或多次, =
    ? 匹配 0 次或 1 次, 如果在任何量词 *, + ? {} 之后使用,则使量词是非贪婪(匹配最小次数), 而不是默认的贪婪模式(匹配最大次数)
    {n} n 为正整数, 匹配 n 次
    {n,} 至少匹配 n 次
    {n,m} m > n, 最少匹配 n 次, 最多匹配 m 次
  • 组和范围

    字符集 含义
    (x) 捕获组: 匹配 x 并记住匹配项.捕获组会带来性能损失, String.match() 不会返回捕获组, String.matchAll() 获取所有匹配项
    (?x) 具名捕获组: 匹配 x 并将其存储在返回的匹配项的 groups 属性中. "web-doc".match(/-(?<customName>\w)/).groups => {customName: "d"}
    (?:x) 非捕获组: 匹配 x, 但不记得匹配.
  • 断言

    字符 含义
    ^ 匹配输入的开头./^A/ 匹配不了 "an A" 中的 "A", 但是可以匹配 "An A" 中开头的 "A"
    $ 匹配输入的结束
    \b 匹配单词边界. /\bm/ 可以匹配 "moon" 中的 "m", 匹配不了 "noom" 中的 "m"
    \B 匹配非单词边界
    x(?=y) 先行断言: x 被 y 跟随时匹配 x, 匹配结果中不包含 y. /x(?=y|z)/: x 后跟有 y 或 z 的情况下才会得到匹配, 不过, 匹配结果中不包含 y 或 z
    x(?!y) 先行否定断言: x 没有被 y紧跟随时匹配 x
    (?<=y)x 后行断言: x 跟随 y的情况下匹配
    (?<!y)x 后行否定断言: x 不跟随 y 时匹配 x
  • flags

    • 格式
      • /regex-pattern/flags
    标志 描述
    g 全局搜索
    i 不区分大小写搜索
    m 多行搜索
    s 允许 . 匹配换行符
    u 使用 unicode 码的模式进行匹配
    y 执行"粘贴(sticky)" 搜索,匹配从目标字符串的当前位置开始