正则表达式不仅能匹配字符,还能匹配位置(也称为锚点或锚定)。位置匹配不消耗任何字符,只指定匹配必须发生在字符串的特定位置(如开头、结尾、单词边界等)。这在验证输入、精确提取文本时非常有用。
| 元字符 | 描述 | 示例 | 匹配说明 |
|---|---|---|---|
| ^ | 匹配字符串(或行)的开头。在多行模式(m 标志)下,匹配每行的开头。 | /^abc/ | 匹配以 “abc” 开头的字符串,如 “abcde” 中的 “abc”,但不匹配 “xabc”。 |
| $ | 匹配字符串(或行)的结尾。在多行模式下,匹配每行的结尾。 | /abc$/ | 匹配以 “abc” 结尾的字符串,如 “xyzabc” 中的 “abc”。 |
| ^...$ | 匹配整个字符串(常用于完整验证)。 | /^\d{3}-\d{4}$/ | 匹配完整的 “123-4567”,但不匹配 “abc123-4567def”。 |
| \b | 匹配单词边界(单词字符 \w 和非单词字符 \W 之间的位置)。 | /\bcat\b/ | 匹配独立的 “cat”(如 “the cat sat”),但不匹配 “scatter” 中的 “cat”。 |
| \B | 匹配非单词边界(\b 的反面)。 | /\Bcat\B/ | 匹配 “scatter” 中的 “cat”,但不匹配独立的 “cat”。 |
| \A | 匹配字符串的绝对开头(不受多行模式影响)。 | /\Aabc/ | 只匹配整个字符串开头的 “abc”,类似于 ^ 但更严格。 |
| \z | 匹配字符串的绝对结尾(不受换行影响)。 | /abc\z/ | 只匹配整个字符串结尾的 “abc”。 |
| \Z | 匹配字符串结尾(可能在最后一个换行前)。 | /abc\Z/ | 类似于 $,但在某些引擎中处理换行不同。 |
环视是一种零宽度断言,只匹配位置,不消耗字符。常用于“前后条件匹配”。
| 元字符 | 描述 | 示例 | 匹配说明 |
|---|---|---|---|
| (?=p) | 正向前瞻:当前位置后面必须匹配 p。 | /\d+(?=px)/ | 匹配后面跟 “px” 的数字,如 “12px” 中的 “12”。 |
| (?!p) | 负向前瞻:当前位置后面不能匹配 p。 | /\d+(?!px)/ | 匹配后面不跟 “px” 的数字,如 “12em” 中的 “12”。 |
| (?<=p) | 正向后瞻:当前位置前面必须匹配 p(部分引擎支持)。 | /(?<=\$)\d+/ | 匹配前面有 “$” 的数字,如 “$100” 中的 “100”。 |
| (?<!p) | 负向后瞻:当前位置前面不能匹配 p。 | /(?<!\$)\d+/ | 匹配前面无 “$” 的数字。 |
验证完整字符串(如手机号):
|
1 |
/^\d{11}$/ |
只匹配正好 11 位数字的字符串。
匹配独立单词:
|
1 |
/\bhello\b/ |
匹配 “hello world” 中的 “hello”,但不匹配 “hello world” 中的 “hello”(如果有连字符等)。
千位分隔符(使用非捕获位置):
|
1 |
/(?<=\d)(?=(\d{3})+$)/g |
在数字中插入逗号,如 “1234567” → “1,234,567”。
位置匹配是正则表达式精确控制的核心,掌握它能让你的模式更强大、更高效!如果有具体示例或语言需求,可以提供更多细节。