2009-08-04 31 views
7

Dado una aguja y un pajar ... Quiero poner etiquetas en negrita alrededor de la aguja. Entonces, ¿qué expresión de expresiones regulares usaría con replace()? Quiero Espacio por el delimitador y quiero que la búsqueda sea sensible a mayúsculasJavascript Regex: ¿Cómo palabras específicas en negrita con expresiones regulares?

lo tanto, decir que la aguja está "vaca" y el pajar es

cows at www.cows.com, milk some COWS 

se convertiría en

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

también las palabras clave deberían poder tener espacios en él así que si la palabra clave es "quién es mgmt" ...

great band. who is mgmt btw? 

would convertirse en

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

Gracias

Respuesta

12

Aquí es una expresión regular para hacer lo que está buscando:

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

En JS, la sustitución es así:

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

envuelto cuidadosamente en una función reutilizable:

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 para tomar un poco más mi respuesta eventual . :) – Amber

+0

¿hay algún error tipográfico? boldKeywords de función (palabras clave, pajar) { \t for (var c = 0; c $ 2 $ 3'); \t} \t retorno pajar; } por alguna razón de que el código no hace nada negrita. gracias – rawrrrrrrrr

+0

updateHaystack ('vacas en www.cows.com, ordeñe algunos VACOS', 'vacas'); no muestra nada, pero updateHaystack ('vacas en www.cows.com, leche algunos VACA ',' vaca '); cambia las vacas a vaca s – rawrrrrrrrr

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

Los marcadores \ b "son para los límites de las palabras"; los indicadores/ig son para ignorar mayúsculas y concordancias globales, respectivamente.

El uso de las() capturas y luego $ 1/$ 2/$ 3 en el nuevo texto de cadena es para que se conserven las mayúsculas y el espaciado de lo que corresponda.

-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

Su ejemplo no funcionará, ya que requiere un espacio a ambos preceden y siguen a la aguja, lo cual no es el caso para cualquiera de los casos de 'vacas' en su old_string. – Amber

+0

Dijo que quería espacio como el delimitador. Para hacer que funcione con inicio y final de las cadenas que podría ser '(^ | \ s)' + aguja + '(\ S | $)' no probado, pero creo que debería funcionar –

9

Para aquellos que no quieren t ESPACIO como delimitador, simplemente no use \s.

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

Funcionó para mí.

Cuestiones relacionadas