Tengo muchas dificultades para hacer coincidir cadenas en JavaScript usando expresiones regulares. El problema es que cuando hago coincidir cadenas como "asistente de abogado" con "abogado", devuelve verdadero. No puedo ignorar/prohibir los guiones, ya que también quiero poder hacer coincidir "asistente-abogado" con "asistente-abogado" y también ser verdadero. No puedo averiguar si debo usar límites de palabras o verificar si la cadena no comienza con un espacio en blanco o un guión.
Lo que tengo hasta ahora es esto:
([^-])(attorney)Aquí hay una prueba: https://www.regextester.com/?fam=121381
Espero que alguien pueda ayudar, gracias de antemano.
Creo que necesita usar límites de palabras y mejorarlos con requisitos adicionales:
(?<=^|[^-])\battorney\b(?=[^-]|$)(?<=^|[^-]) - afirmar que detrás de mí está el comienzo de una línea o no es un guión\b - límite de palabrasattorney - el término de búsqueda\b - límite de palabra(?=[^-]|$) - afirmar que delante de mí no hay un guión o es el final de una líneaabogado - https://regex101.com/r/HCRKWi/1
abogado asistente - https://regex101.com/r/2tvU1n/1
Creo que un simple grupo de Negative Lookbehind podría hacer el truco.
(?<!-)attorney
Negative Lookbehind
(?<!-)Afirma que el Regex a continuación no coincide
Como dijo @MonkeyZeus, la primera versión falló en los attorneys y fakewordwithattorneyinit
La nueva expresión regular está usando una búsqueda negativa hacia atrás y una búsqueda negativa hacia adelante con este aspecto:
\b(?<!-)attorney(?!-)\b si desea hacer coincidir todas las cadenas 
^\b(?<!-)attorney(?!-)\b si desea hacer coincidir "la línea comienza con el término"