原文链接:http://javascript.info/regexp-anchors,translate with ❤️ by zhangbao.

    插入符号 ^ 和美元符号 $ 在正则表达式里有特殊意义。称为”锚点”。

    插入符号 ^ 匹配文本的开始,美元符号 $ 匹配文本结束位置。

    例如,我们用 Mary 这个文本测试下:

    1. let str1 = "Mary had a little lamb, it's fleece was white as snow";
    2. let str2 = 'Everywhere Mary went, the lamp was sure to go';
    3. alert( /^Mary/.test(str1) ); // true
    4. alert( /^Mary/.test(str2) ); // false

    模式 ^Mary 表示”字符串以 Mary 开头”。

    现在我们测试下文本是否以 Email 地址结束。

    为了匹配 Email,我们可以使用正则:[-.\w]+@([\w-]+\.)+[\w-]{2,20}。这并不是最准确的,但满足大多数的情况。

    为了测试文本是否是以 Email 结尾的,我们在模式后面添加 $OK 了。

    1. let reg = /[-.\w]+@([\w-]+\.)+[\w-]{2,20}$/g;
    2. let str1 = 'My email is mail@site.com';
    3. let str2 = 'Everywhere Mary went, the lamp was sure to go';
    4. alert( reg.test(str1) ); // true
    5. alert( reg.test(str2) ); // false

    我们可以同时使用两个锚来检查字符串是否完全符合模式。这通常用于验证。

    例如,我们想要检查 str 是否是一个有效的十六进制颜色(以 # 开头)。匹配颜色的模式是 #[0-9a-f]{6}

    为了检查整个字符串是否与之匹配,我们添加 ^...$

    1. let str = '#abcdef';
    2. alert( /^#[0-9a-f]{6}$/i.test(str) ); // true

    正则引擎寻找文本开始,然后是颜色,最后立即文本结束。这正是我们需要的。

    注:锚点不占宽度

    锚点就像 \b 是测试的,没有宽度。

    也就是说,它们不匹配任何字符,而是强制正则引擎检查是否符合某个条件(文本开始/结束)。

    锚点的行为还会根据是否有无 m 标记(多行模式),而在行为上表现不同。我们将在下一章里进行叙述。

    (完)