Al hacer coincidir "nombre del producto del producto cat1" con esta expresión regular, obtengo "nombre del producto" con un espacio en blanco inicial, por supuesto, podría recortar en javascript, pero ¿hay alguna manera de modificar la expresión regular para no capturar ese espacio en blanco?
(product)((\s+)(.(?!cat1|cat2))+)Otra forma de verlo es usar un cuantificador no codicioso (.*?) en un solo grupo de captura y hacer coincidir cat1 o cat2 si solo está interesado en product name .
\bproduct\s+(.*?)\s+cat[12]\bPuedes usar
(product)(\s+)((?:(?!cat1|cat2).)+)Vea la demostración de expresiones regulares .
Nota:
(\s+) .