2024年11月3日

锚点:字符串开始 ^ 和末尾 $

插入符号 ^ 和美元符号 $ 在正则表达式中具有特殊的含义。它们被称为“锚点”。

插入符号 ^ 匹配文本开头,而美元符号 $ 则匹配文本末尾。

举个例子,让我们测试一下文本是否以 Mary 开头:

let str1 = "Mary had a little lamb";
alert( /^Mary/.test(str1) ); // true

该模式 ^Mary 表示:字符串开始,紧接着就是 “Mary”。

与此类似,我们可以用 snow$ 来测试文本是否以 snow 结尾:

let str1 = "it's fleece was white as snow";
alert( /snow$/.test(str1) ); // true

在以上这些特殊的例子中我们实际上可以用 startsWith/endsWith 来代替。正则表达式应该被用于更加复杂的测试。

测试完全匹配

这两个锚点 ^...$ 放在一起通常被用于测试一个字符串是否完全匹配一个模式。例如,检查用户输入的格式是否正确。

让我们测试一个字符串是否是 12:34 格式的时间。即,两位数,然后是一个冒号,接着是另一个两位数。

用正则表达式来表示就是 \d\d:\d\d

let goodInput = "12:34";
let badInput = "12:345";

let regexp = /^\d\d:\d\d$/;
alert( regexp.test(goodInput) ); // true
alert( regexp.test(badInput) ); // false

在这个例子中 \d\d:\d\d 所对应的匹配项必须正好在文本 ^ 的开头之后开始,并且结尾 $ 必须紧跟其后。

整个字符串必须完全符合这个格式。如果其中有任何偏差或额外的字符,结果将为 false

如果有修饰符 m,那么锚点的行为将会不同。我们将在下一篇文章中学习这一点。

锚点“宽度”为零

锚点 ^$ 属于测试。它们的宽度为零。

换句话说,它们并不匹配一个具体的字符,而是让正则引擎测试所表示的条件(文本开头/文本末尾)。

任务

什么字符串可以匹配模式 ^$

空字符串是唯一的匹配项:它开始并立即结束。

这个题目再次证明了锚点不是字符串,而是测试。

对于空字符串 "",正则表达式引擎将会首先匹配 ^(输入开始),匹配成功,然后立即匹配结束 $,也匹配成功。所以空字符串是匹配项。

教程路线图

评论

在评论之前先阅读本内容…
  • 如果你发现教程有错误,或者有其他需要修改和提升的地方 — 请 提交一个 GitHub issue 或 pull request,而不是在这评论。
  • 如果你对教程的内容有不理解的地方 — 请详细说明。
  • 使用 <code> 标签插入只有几个词的代码,插入多行代码可以使用 <pre> 标签,对于超过 10 行的代码,建议你使用沙箱(plnkrJSBincodepen…)