我对在 JavaScript 中使用正则表达式还比较陌生,并且遇到了与“@”用户名模式有关的特殊情况,这给我带来了大约 3 个小时的麻烦。
我想复制 Facebook 和 Twitter 等网站社交媒体文本字段中的 @username 模式。 (我知道他们解析标记化宏,但我想要一个纯正则表达式版本)。
我已经附上了我所实现的最接近模式的图像,但是我也会输入该图像,以便任何人都可以更轻松地复制并粘贴到他们自己的正则表达式模式检查器中。
如您所见,@ 符号能够捕获所有后续的字母字符,并且该 @ 符号之前没有任何内容,并以空格终止。有一种特殊情况,应忽略包含 @ 符号的 URL。 (如图所示)并且@符号可以在文本字段的最开始使用,在这种情况下应该解析句柄。
显然,我现有的模式是将 @ 符号前面的字符收集起来,这是不正确的。任何帮助都会很棒。
/(^^|[^\/])(@[A-Za-z0-9_.]{3,25})/gm
@test testing
@test testing
testing ,@test
https://youtube.com/@test
我在 3 个多小时内尝试了多种模式组合,试图隔离流行社交网络中看到的@handle 样式标签。我希望能够仅隔离包含单个 @ 分隔用户名的模式部分。我希望我可以忽略这个作为 URL 一部分的模式。
我的实际结果导致前面的字符被收集并添加到最终的字符串中,这是不正确的。
Instagram 根据 2024 年指南对用户名提出了新的要求,更多内容可以在其官方文档中查看。如果您在客户端使用它,并且希望您的正则表达式兼容 IOS 和 Android,您可以使用以下正则表达式:
/^(?![0-9]+$)a-zA-Z0-9_{0,28}$/
分解: