原文链接:http://javascript.info/regexp-anchors,translate with ❤️ by zhangbao.
插入符号 ^
和美元符号 $
在正则表达式里有特殊意义。称为”锚点”。
插入符号 ^
匹配文本的开始,美元符号 $
匹配文本结束位置。
例如,我们用 Mary
这个文本测试下:
let str1 = "Mary had a little lamb, it's fleece was white as snow";
let str2 = 'Everywhere Mary went, the lamp was sure to go';
alert( /^Mary/.test(str1) ); // true
alert( /^Mary/.test(str2) ); // false
模式 ^Mary
表示”字符串以 Mary 开头”。
现在我们测试下文本是否以 Email 地址结束。
为了匹配 Email,我们可以使用正则:[-.\w]+@([\w-]+\.)+[\w-]{2,20}
。这并不是最准确的,但满足大多数的情况。
为了测试文本是否是以 Email 结尾的,我们在模式后面添加 $
就 OK
了。
let reg = /[-.\w]+@([\w-]+\.)+[\w-]{2,20}$/g;
let str1 = 'My email is mail@site.com';
let str2 = 'Everywhere Mary went, the lamp was sure to go';
alert( reg.test(str1) ); // true
alert( reg.test(str2) ); // false
我们可以同时使用两个锚来检查字符串是否完全符合模式。这通常用于验证。
例如,我们想要检查 str
是否是一个有效的十六进制颜色(以 #
开头)。匹配颜色的模式是 #[0-9a-f]{6}
。
为了检查整个字符串是否与之匹配,我们添加 ^...$
:
let str = '#abcdef';
alert( /^#[0-9a-f]{6}$/i.test(str) ); // true
正则引擎寻找文本开始,然后是颜色,最后立即文本结束。这正是我们需要的。
注:锚点不占宽度
锚点就像 \b
是测试的,没有宽度。
也就是说,它们不匹配任何字符,而是强制正则引擎检查是否符合某个条件(文本开始/结束)。
锚点的行为还会根据是否有无 m
标记(多行模式),而在行为上表现不同。我们将在下一章里进行叙述。
(完)