非捕获元讲解
正则表达式语法中,有一种称为”非捕获元“。是基于子表达式的语法规则;
举例1 | (pattern) | 匹配 pattern 并获取这一匹配。所获取的匹配可以从产生的 Matches 集合得到。 |
举例2 | (?:pattern) | 匹配 pattern 但不获取匹配结果。 |
举例3 | (?=pattern) | 正向肯定预查(look ahead positive assert)。这是一个非获取匹配。 |
举例4 | (?!pattern) | 正向否定预查(negative assert)。这是一个非获取匹配。 |
举例5 | (?<=pattern) | 反向(look behind)肯定预查,与正向肯定预查(?=pattern)类似,只是方向相反。这是一个非获取匹配。 |
举例6 | (?<!pattern) | 反向否定预查,与正向否定预查(?!pattern)类似,只是方向相反。这是一个非获取匹配。 |
举例1:
表达式: /win(1|2|3)/g
字符串: "win4win3win2"
共找到 2 处匹配:
win3
win2
举例2:
表达式: /win(?:1|2|3)/g
字符串: "win4win3win2"
共找到 2 处匹配:
win3
win2
类似于表达式:/win1|win2|win3/g 或者是 /win(1|2|3)/g
举例3:正向 肯定
表达式: /win(?=1|2|3)/g
字符串: "win4win3win2"
共找到 2 处匹配:
win
win
能够匹配到win3 win2的win,不能匹配win4的win;
举例4:正向 否定
表达式: /win(?!1|2|3)/g
字符串: "win4win3win2"
共找到 1 处匹配:
win
能够匹配到win4的win,不能匹配win2 win3的win;
举例5:反向 肯定
表达式: /(?<=1|2|3)win/g
字符串: "4win3win2win"
共找到 2 处匹配:
win
win
能够匹配到3win 2win的win,不能匹配4win的win;
举例6:反向 否定
表达式: /(?<!1|2|3)win/g
字符串: "4win3win2win"
共找到 1 处匹配:
win
能够匹配到4win的win,不能匹配2win 3win的win;