用于检测标记的@users 的正则表达式

Regex for detecting tagged @users

我正在制作一个应用程序,如果用户在文本中包含“@username”,它会标记他们并发送通知。 我尝试通过使用这个正则表达式 /\B(\@[a-zA-Z]+\b)(?!;)/ 来做到这一点,但我不希望它在有多个“@”时认为它有效。 例如:

@用户名 - 有效

@@用户名 - 无效

嘿@username - 有效

@usern@name - 无效

hey@username - 无效

将帮助您完成所需任务的正则表达式 -

^@[A-z0-9_-.]+$

假设你还会遇到诸如-

这样的用户名

@user.name

@用户名

@user_name

@user.name.

@User_name

您可以使用正则表达式 ^@[a-z]+$

function isValid(str) {
  const regex = /^@[a-z]+$/;
  return str.split(" ").some((s) => regex.test(s));
}

console.log(isValid("@username"))
console.log(isValid("hey @username"))
console.log(isValid("@@username"))
console.log(isValid("@usern@name"))
console.log(isValid("hey@username"))

(?<=\s|^\s?)@[a-zA-Z]+(?=\s|\s?$) 可能有效。

const testcase = ['@username', '@@username', 'hey @username', '@usern@name', 'hey@username', 'hey @username hey', '@username hey'];

testcase.forEach(text => {
    console.log(text + ' => ' + 
        /(?<=\s|^\s?)@[a-zA-Z]+(?=\s|\s?$)/.test(text)
    );
});