2009-08-04 23 views
7

Dato un ago e un mucchio di fieno ... Voglio mettere delle etichette in grassetto attorno all'ago. Quindi quale espressione regex dovrei usare con replace()? Voglio spazio per essere il delimitatore e voglio la ricerca sia case insensitiveRegex Javascript: come mettere in grassetto parole specifiche con regex?

così dicono che l'ago è "mucca" e il pagliaio è

cows at www.cows.com, milk some COWS 

si trasformerebbe in

<b>cows</b> at www.cows.com, milk some <b>COWS</b> 

anche parole chiave devono essere in grado di avere spazi in esso, quindi se la parola chiave è "chi è mgmt" ...

great band. who is mgmt btw? 

sarebbe trasformarsi in

great band. <b>who is mgmt</b> btw? 

Grazie

risposta

12

Ecco una regex di fare quello che stai cercando:

(^|\s)(cows)(\s|$) 

In JS, la sostituzione è in questo modo:

myString.replace(/(^|\s)(cows)(\s|$)/ig, '$1<b>$2</b>$3'); 

avvolto ordinatamente in una funzione riutilizzabile:

function updateHaystack(input, needle) { 
    return input.replace(new RegExp('(^|\\s)(' + needle + ')(\\s|$)','ig'), '$1<b>$2</b>$3'); 
} 

var markup = document.getElementById('somediv').innerHTML; 
var output = updateHaystack(markup, 'cows'); 
document.getElementById('somediv').innerHTML = output; 
+0

+1 per prendere la mia risposta finale un po 'più . :) – Amber

+0

c'è un errore di battitura? boldKeywords funzione (parole chiave, Mucchio di fieno) { \t for (var c = 0; c $ 2 $ 3'); \t} \t ritorno pagliaio; } per qualche motivo che il codice non grassetto nulla. grazie – rawrrrrrrrr

+0

updateHaystack ('mucche a www.cows.com, mungere alcune MUCCHE', 'mucche'); non grassetto nulla, ma updateHaystack ('mucche su www.cows.com, mungere qualche MUCCA "," mucca "); cambia le mucche a mucca s – rawrrrrrrrr

1
findstring: /(^|\s)(cows)(\s|$)/ig 
newstring: '$1<b>$2</b>$3' 

I marcatori \ b sono per "confini parola"; i flag/ig sono rispettivamente per ignorare il caso e corrispondenza globale.

L'utilizzo delle() acquisizioni e quindi $ 1/$ 2/$ 3 nel nuovo testo di stringa è in modo tale che le maiuscole e le spaziature di qualsiasi cosa sia stata abbinata verranno mantenute.

-1
var needle = 'cows'; 

var regexp = new RegExp('(^|\s)('+needle+')(\s|$)', 'ig'); 

var old_string = 'cows at www.cows.com, milk some COWs'; 

var new_string = old_string.replace(regexp, '<b>$1$2$3</b>'); 
+0

L'esempio non funzionerà, perché richiede uno spazio per precedere e seguire l'ago, il che non è il caso per nessuna delle istanze di "mucche" nella stringa vecchia. – Amber

+0

Ha detto di volere lo spazio come delimitatore. Per farlo funzionare con inizio e fine di stringhe potrebbe essere '(^ | \ s)' + ago + '(\ s | $)' non testato, ma penso che dovrebbe funzionare –

9

Per coloro che non amano t SPAZIO come delimitatore, semplicemente non utilizzare \s.

function updateHaystack(input, needle) 
{ 
return input.replace(new RegExp('(^|)(' + needle + ')(|$)','ig'), '$1<b>$2</b>$3'); 
} 

Ha funzionato per me.