Utilizando el patrón REGEX:
[^?!.\s][^?!.]*?\b([Cc]at|[Dd]og|[Bb]ird)\b[^?!.]*[.?!]para hacer coincidir una oración completa con las palabras incluidas anteriormente, incluso si la oración ocupa varias líneas.
Sin embargo, descubrí que si la palabra de interés es la primera en la oración, no coincidirá.
Por ejemplo: El pájaro está muerto. Coincidirá. Los días de perros se terminaron. No lo haré. A menudo, las oraciones que busco están incompletas gramaticalmente como la segunda lista, pero siguen una mayúscula inicial y una estructura de punto.
Puedes usar
(?=\s)[^?!.]*?\b([Cc]at|[Dd]og|[Bb]ird)\b[^?!.]*[.?!] \b[^?!.]*?\b([Cc]at|[Dd]og|[Bb]ird)\b[^?!.]*[.?!] En la primera expresión regular, el primer carácter coincidente DEBE ser un carácter que no sea un espacio en blanco porque (?=\s) es una búsqueda anticipada positiva que coincide con una ubicación seguida inmediatamente por un carácter de espacio en blanco.
El \b en la segunda variante es más específico y coincide con una posición entre un inicio de cadena/caracter que no es palabra y un carácter de palabra, o entre un carácter de palabra y un carácter que no es palabra/fin de cadena.
Tenga en cuenta que en JavaScript \b el límite de palabras no es compatible con Unicode, y si necesita compatibilidad completa con el límite de palabras de Unicode, necesitará una solución alternativa, consulte Reemplazar ciertas palabras árabes en una cadena de texto usando Javascript .