@username 使用 JavaScript 的社交媒体正则表达式

问题描述 投票:0回答:3

我对在 JavaScript 中使用正则表达式还比较陌生,并且遇到了与“@”用户名模式有关的特殊情况,这给我带来了大约 3 个小时的麻烦。

我想复制 Facebook 和 Twitter 等网站社交媒体文本字段中的 @username 模式。 (我知道他们解析标记化宏,但我想要一个纯正则表达式版本)。

我已经附上了我所实现的最接近模式的图像,但是我也会输入该图像,以便任何人都可以更轻松地复制并粘贴到他们自己的正则表达式模式检查器中。

如您所见,@ 符号能够捕获所有后续的字母字符,并且该 @ 符号之前没有任何内容,并以空格终止。有一种特殊情况,应忽略包含 @ 符号的 URL。 (如图所示)并且@符号可以在文本字段的最开始使用,在这种情况下应该解析句柄。

显然,我现有的模式是将 @ 符号前面的字符收集起来,这是不正确的。任何帮助都会很棒。

RegEx101 示例(带亮点)

RegEx101 example

正则表达式不起作用

/(^^|[^\/])(@[A-Za-z0-9_.]{3,25})/gm

文本版本方便复制+粘贴

@test testing
 @test testing
testing ,@test
https://youtube.com/@test

我在 3 个多小时内尝试了多种模式组合,试图隔离流行社交网络中看到的@handle 样式标签。我希望能够仅隔离包含单个 @ 分隔用户名的模式部分。我希望我可以忽略这个作为 URL 一部分的模式。

我的实际结果导致前面的字符被收集并添加到最终的字符串中,这是不正确的。

javascript regex parsing usernametoken
3个回答
4
投票

听起来你想要积极的回顾

(?<=YOUR_REGEX)
/(?<=^|[^\/])(@[A-Za-z0-9_.]{3,25})/gm

enter image description here


0
投票

我看到您已经接受了答案,但这里有另一个版本可能适合您想要做的事情。

/(?<=[^\/]|^)@[A-Za-z0-9_.]{3,25}/g

这匹配任何...

  • 位于行首 OR 前面没有正斜杠 (
    /
    )
    • 感谢@Samathingamajig 指出了这一点。
  • @
    符号开头
  • 后跟 3 到 25 个字母数字(包括
    _
    .
    )字符。

Screenshot of the above regular expression being checked against the provided test cases.


0
投票

Instagram 根据 2024 年指南对用户名提出了新的要求,更多内容可以在其官方文档中查看。如果您在客户端使用它,并且希望您的正则表达式兼容 IOS 和 Android,您可以使用以下正则表达式:

/^(?![0-9]+$)a-zA-Z0-9_{0,28}$/

分解:

  1. ^(?![0-9]+$):确保用户名不完全是数字(iOS 在开始时支持负向前瞻)。
  2. [a-zA-Z0-9_]:确保用户名以字母、数字或下划线开头。
  3. (?:[a-zA-Z0-9_]*(?:.[a-zA-Z0-9_]+)?){0,28}$:允许点出现,但仅当它们不出现时连续的。限制总数 长度不超过 30 个字符。
© www.soinside.com 2019 - 2024. All rights reserved.