Quiero una expresión regular que permita solo un espacio dentro de un conjunto de caracteres. Tengo la siguiente expresión regular que no acepta espacio. La siguiente expresión regular solo admite cadenas como
1. @alia 2. @ranbir 3. @shilpa
const regex = /@(\w+([az]|[AZ]|[0-9]|[-]|[_]|[.]|['])*)$/g;Quiero una expresión regular que permita cadenas como
1. @alia bhat 2. @ranbir kapoor 3. @shilpa shetty
Puedes intentar algo como esto:
@([\w\-\.\']+(?:\s[\w\-\.\']+)?)$Explicación: agrupa todos los caracteres en un solo conjunto (\w = a-zA-Z0-9_ + el resto de los caracteres)
luego, un siguiente grupo coincidiría opcionalmente con un solo espacio seguido de al menos un carácter del mismo conjunto de caracteres, esto significa que sus palabras únicas actuales coincidirán y también dos palabras, pero no si hay dos espacios o solo un espacio en el final
Ejemplo de trabajo: https://regex101.com/r/czanzG/1
Si desea permitir un solo espacio después del nombre, simplemente elimine \s del grupo
@([\w\-\.\']+\s?(?:[\w\-\.\']+)?)$Puede usar la alternativa de expresiones regulares. La primera alternativa es aceptar el espacio y la segunda es su expresión regular original.
/@(\w+ \w+|\w+)/gActualizado
Olvidé poner $ (regex the end of string) e incluir algunos caracteres .-'
/@([\w\-.']+ [\w\-.']+|[\w\-.']+)$/gEjemplo: https://regex101.com/r/LT7I1M/1