Cómo ubicar correctamente todas las palabras clave en una cadena que pueden haberse superpuesto entre sí.
tengo una frase:
“Juega con el código y haz clic en el botón Ejecutar para ver el resultado”.
Y dos conjuntos de palabras clave.
keywordSet1 = ['click on the Run', 'view the result'] keywordSet2 = ['on the', 'code and click on', 'the Run button to', 'Play around']Aparentemente,
'haga clic en Ejecutar' en el conjunto 1 se superpone parcialmente con 'código y haga clic en', 'el botón Ejecutar para' en el conjunto 2;
'en el' en el conjunto 2 se superpone con 'haga clic en Ejecutar' en el conjunto 1
Para ubicar todas las posiciones de las palabras clave, escribo este código. Para rodear todas las palabras clave con $#k1{keyword}$ o $#k2{keyword}$
text = “Play around with the code and click on the Run button to view the result.” keywordSet1.forEach((key) => {text = text.replace(key,`$#k1$&$`)}) keywordSet2.forEach((key) => {text = text.replace(key,`$#k2$&$`)})Problema:
Sin embargo, esta forma a veces facilitará la marcación de k1 en las oraciones, lo que causará un problema en la representación. Por ejemplo, del resultado del método replace. se convirtió en esto
'$#k2Play around$ with the code and $#k1click $#k2on the$ Run$ button to $#k1view the result$'Por ejemplo, en el conjunto de palabras clave 1, 'haga clic en Ejecutar' se superpone de alguna manera con 'código y haga clic en', 'el botón Ejecutar para' en el conjunto de palabras clave 2.
Pero con mi código, de alguna manera no funcionó como esperaba, la parte resaltada muestra el problema
'$#k2Juega$ con el código y $#k1haz clic en $#k2en el botón$ Ejecutar$ para $#k1ver el resultado$' ('en el' solo está resaltado por $#k2en el$)
Mi expectativa es:
'$#k2Play around$ with the $#k2code and$ $#k1click$ $k1#$#k2on the Run$$ $#k2button to$ $#k1view the result$'Para verlo visualmente, aquí hay un digrama