Estoy creando una aplicación en la que si un usuario tiene "@nombre de usuario" en un texto, lo etiqueta y envía una notificación. Traté de hacer esto usando esta expresión regular /\B(\@[a-zA-Z]+\b)(?!;)/ esto funciona pero no quiero que se considere válido cuando hay más de uno " @". Por ejemplo:
@nombre de usuario - válido
@@Nombre de usuario inválido
hola @nombredeusuario - válido
@usuario@nombre - inválido
hola@nombre de usuario - inválido
Puede usar expresiones regulares ^@[az]+$
function isValid(str) { const regex = /^@[az]+$/; 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?$) podría funcionar.
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) ); });Regex que lo ayudará a lograr la tarea que desea:
^@[A-z0-9_-.]+$Suponiendo que también encontrará nombres de usuario como:
@nombre de usuario
@nombre de usuario
@nombre de usuario
@nombre de usuario.
@Nombre de usuario