You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript正则表达式匹配社交媒体@用户名的问题求助

解决方案:匹配社交媒体@用户名的正则表达式

正确正则表达式

如果你需要捕获包含@的完整用户名:

/(?<!/)@[A-Za-z0-9_.]{3,25}/gm

如果只需要捕获@后面的用户名部分(不带@):

/(?<!/)@([A-Za-z0-9_.]{3,25})/gm

原正则的问题分析

你之前的正则/(^^|[^/])(@[A-Za-z0-9_.]{3,25})/gm存在两个核心问题:

  1. 错误使用重复的行首断言^^,逻辑冗余且可能引发匹配异常;
  2. 通过捕获组([^/])会把@前的非斜杠字符(比如空格、逗号)一并捕获,违背了你“仅捕获@后合法用户名”的需求。

正则规则详解

  • (?<!/):负向后顾断言,确保@符号的前面不是斜杠/,以此排除URL路径中的@(比如https://youtube.com/@test这类场景);
  • @:匹配@符号本身;
  • [A-Za-z0-9_.]{3,25}:匹配3-25位合法用户名字符,覆盖大小写字母、数字、下划线和点;
  • /gm:全局匹配(g)+多行模式(m),支持匹配文本中所有符合条件的@用户名,同时兼容@位于多行文本开头的场景。

测试示例

const testText = `@test testing
 @test testing
testing ,@test
https://youtube.com/@test`;

// 捕获完整@用户名
const fullMatchRegex = /(?<!/)@[A-Za-z0-9_.]{3,25}/gm;
console.log(Array.from(testText.matchAll(fullMatchRegex), m => m[0]));
// 输出: ["@test", "@test", "@test"]

// 仅捕获用户名部分
const nameOnlyRegex = /(?<!/)@([A-Za-z0-9_.]{3,25})/gm;
console.log(Array.from(testText.matchAll(nameOnlyRegex), m => m[1]));
// 输出: ["test", "test", "test"]

内容的提问来源于stack exchange,提问作者ninnjak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 22:01:08