En el contexto del uso de expresiones regulares para hacer coincidir documentos con varias palabras clave, podría llevar un tiempo cuadrático (número de documentos × número de palabras clave).
Con un conjunto de las siguientes palabras clave:
['ant', 'antelope', 'albatross', 'alligator']Produciría la estúpida expresión regular:
/ant|antelope|albatross|alligator/Pero estoy buscando una solución que convierta el conjunto en algo como:
/a(nt(|elope)|l(batross|ligator))/que es bastante más eficiente
Produje una biblioteca simple para que ese trabajo esté disponible en npm npm i regexp-factorize que se puede usar de la siguiente manera
import { factorizeOr } from 'regexp-factorize'; const keywords = ['ant', 'antelope', 'albatross', 'alligator']; const regexpString = factorizeOr(keywords); const regexp = new RegExp(regexpString); const document = "There's an alligator in my house"; console.log(regexp); // /a(?:nt(?:|elope)|l(?:batross|ligator))/ console.log(regexp.test(document)); // true