Les expressions régulières sont très bien tant que mots-clés sont vraiment des mots, vous pouvez simplement utiliser un constructeur RegExp au lieu d'un littéral pour créer un à partir une variable:
var re= new RegExp('('+word+')', 'gi');
return s.replace(re, '<b>$1</b>');
La difficulté se pose si « mots-clés 'peut avoir de la ponctuation, car la ponctuation tend à avoir une signification spéciale dans les expressions rationnelles. Malheureusement, contrairement à la plupart des autres langages/bibliothèques avec le support de regexp, il n'y a pas de fonction standard pour échapper à la ponctuation pour les expressions rationnelles en JavaScript.
Et vous ne pouvez pas savoir exactement quels caractères doivent s'échapper car l'implémentation de regexp de chaque navigateur n'est pas forcément identique. (En particulier, les nouveaux navigateurs peuvent ajouter de nouvelles fonctionnalités.) Et les caractères d'échappement antislash qui ne sont pas spéciaux ne sont pas garantis pour continuer à fonctionner, bien qu'en pratique cela soit le cas.
donc sur le mieux que vous pouvez faire est l'un des:
- essayant d'attraper chaque caractère spécial dans l'usage commun du navigateur aujourd'hui [ajouter: voir la recette de Sebastian]
- antislash échapper à tous les non-caractères alphanumériques. care: \ W correspondra également aux caractères Unicode non-ASCII, que vous ne voulez pas vraiment.
- simplement veiller à ce qu'il n'y ait pas non-caractères alphanumériques dans le mot-clé avant de rechercher
Si vous utilisez ce pour mettre en évidence les mots au format HTML qui a déjà un balisage dans, cependant, vous avez du mal. Votre «mot» peut apparaître dans un nom d'élément ou une valeur d'attribut, auquel cas essayer d'envelopper un < b> autour de lui provoquera une brisure. Dans des scénarios plus complexes peut-être même un trou de sécurité d'injection HTML vers XSS. Si vous devez faire face à un balisage, vous aurez besoin d'une approche plus compliquée, en divisant le balisage '< ...> avant d'essayer de traiter chaque tronçon de texte seul.
Je ne pense pas que votre exemple fonctionne. – tvanfosson
Je vois, seule la première occurrence est remplacée. Je ne savais pas que remplacer se comporte comme ça. Le preg_quote est important s'il veut mettre en évidence des chaînes avec/ou * ou d'autres caractères regex. – okoman
Um .. c'est * est * javascript. Je viens de dire qu'il y a une fonction en PHP appelée preg_quote. Puis j'ai inclus une version js de cette fonction et une fonction js ... ces exemples de code * sont * js – okoman