模块 6 · 第 3 课(共 4)课程中的23/32~12 min
模块课程(3/4)
回顾:`(?<=...)``(?<!...)`
后视是前视的镜像:它们看起来之前 当前位置,仍然为零宽度。
(?<=...)-- 正向后查找:模式必须位于前面。(?<!...)-- 负向后查找:模式不得位于前面。
Code
Pattern: (?<=\$)\d+
Sample: Costo $100, sconto -25, totale $75.
^^^ ^^$ 不在匹配中,但用作条件:仅限数字
前面是美元符号匹配。
负向回顾
Code
Pattern: (?<!\w)\d+
Sample: Codice abc123 e numero 456.
^^^(?<!\w) 要求数字之前没有单词字符:
abc123 被排除(在 123 之前有 c,一个 \w), 456 匹配(在 456 之前)
有一个空格)。
与非捕获组的主要区别
Code
\\$\\d+ matches "$100": the match includes the dollar sign.
(?<=\\$)\\d+ matches "100": the match contains ONLY the digits.如果需要提取不带前缀的“干净”值,lookbehind 是正确的选择。
JavaScript 中的后向兼容性
正的 (?<=...) 和负的 (?<!...) 后向检查当前位置之前的内容。在JavaScript中,从ES2018开始支持它们;在旧版浏览器或旧版 Node.js 引擎中,它们会导致语法编译错误。
尝试一下
锻炼#regex.m6.l3.e1
尝试:0加载中...
仅从文本中的价格中提取数字金额(不带 $ 符号)。
正在加载编辑器...
显示提示
将 \\$ 移动到正向后查找 (?<=\\$) 内:位置条件,不是匹配的一部分。
3 次尝试后可用的解决方案
复习练习
锻炼#regex.m6.l3.e2
尝试:0加载中...
查找前面没有字母或数字的每个数字序列(即“孤立的”数字,而不是像“abc123”这样的代码部分)。
正在加载编辑器...
显示提示
使用负向后查找 (?<!\\w) 来排除前面有字母或数字的情况。
3 次尝试后可用的解决方案
额外的挑战
锻炼#regex.m6.l3.e3
尝试:0加载中...
Find only the digits of negative numbers (digits preceded by the `-` sign), excluding the minus sign from the match.
正在加载编辑器...
显示提示
将减号 - 移到正向后查找 (?<=-) 内。
3 次尝试后可用的解决方案