2022 年 4 月 13 日

锚点:字符串开头 ^ 和结尾 $

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

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

例如,让我们测试文本是否以 Mary 开头

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

模式 ^Mary 表示:“字符串开头,然后是 Mary”。

类似地,我们可以使用 snow$ 测试字符串是否以 snow 结尾

let str1 = "its 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 问题或拉取请求,而不是评论。
  • 如果您无法理解文章中的某些内容,请详细说明。
  • 要插入几行代码,请使用<code>标签,对于多行代码,请将它们包装在<pre>标签中,对于超过 10 行的代码,请使用沙盒(plnkrjsbincodepen…)