Hay un patrón de expresiones regulares:
[a-zA-Z0-9]+.?(com|net)
Lo uso para reemplazar las palabras en cadenas con esta función:
const formatString = (str) => { const regex = new RegExp("[a-zA-Z0-9]+.?(com|net)","gi"); return str.replace(regex, "*") }Ejemplos de ejecución de funciones:
formatString("google.com something else.net") // returns: "* something *" formatString("google.com") // returns: "*" formatString("something") // returns: "something"pero en algunos casos, necesito hacer una palabra de excepción para que no se reemplace.
Ejemplo:
la palabra de excepción es google (o google.com )
formatString("google.com something else.net") // should returns: "google.com something *"
Traté de hacerlo con negative lookahead usando este patrón: (?!google)[a-zA-Z0-9]+.?(com|net) , pero no funciona, solo ignora la primera letra de la palabra .
Coincide con la información de https://regex101.com/
Puedes usar
const regex = /\b(?!google\b)[a-zA-Z0-9]+\.(?:com|net)\b/gi;Detalles :
\b - límite de palabras(?!google\b) - una búsqueda anticipada negativa que falla la coincidencia si hay google como una palabra completa inmediatamente a la derecha de la posición actual[a-zA-Z0-9]+ - una o más letras o dígitos ASCII\. - un punto(?:com|net) : un grupo que no captura que coincide con com o net\b - un límite de trabajo.