2011-08-08 25 views
5

Básicamente, necesito ser capaz de encontrar ciertas palabras (por 'palabra' me refiero a un conjunto de caracteres ) en una cadena (sin distinción entre mayúsculas y minúsculas) y si coinciden, necesito insertar un símbolo después de la primera letra de ese conjunto particular de personajes. No puedo usar search replace, ya que eso no preservaría el caso.¿Conversión y sustitución de mayúsculas y minúsculas insensibles a Javascript?

Ejemplo:

brownies de Brown son en un horno.

Si la palabra que estoy buscando es brown, y el carácter Quiero insertar es *, el resultado debería ser:

B * b * rown rownies están en un horno.

¿Cuál es la mejor manera de hacerlo en JS?

Respuesta

1
function astAfterFirstLetter(words) { 
    var re = new RegExp("\\b(?=" + words.join("|") + "\\b)(\\w)(\\w*)", "gi"); 
    return function (str) { return str.replace(re, "$1*$2"); }; 
} 

astAfterFirstLetter(["brown", "cow"])("How now brown cow!") 

produce

How now b*rown c*ow! 
+0

Simplemente agregue la bandera 'i' para que no distinga entre mayúsculas y minúsculas según OP – Mrchief

+0

@Mrchief, gracias. editado –

1

Puede utilizar expresiones regulares, algo así como:

var re = /(B)(rown)/gi; 

console.log("Brown brownies are in an oven".replace(re, "$1*$2")); 
+0

Esto tiene que ser más universal, no sólo para una determinada palabra/combinación de cuerdas. –

+0

¿Cómo? Puede crear su patrón de expresiones regulares de forma dinámica, si eso ayuda. – Mrchief

+1

¿Qué se supone que '[\ w +]' debe lograr? No hay nada que requiera la coincidencia de un signo más, carácter de palabra o espacio. –

7

expresión regular con la opción 'ig' hace el truco.

"Brown brownies are in an oven.".replace(/(b)(rown)/gi, "$1*$2") 
+0

+1, solución concisa – pimvdb

1
var str = 'Brown brownies are in an oven.' 
var s = 'brown'; 
var r = '*'; 
var re = new RegExp('('+s.substr(0,1)+')('+s.substr(1)+')','ig'); 
log(str.replace(re, '$1'+r+'$2')); 

Pero usted tendrá que estar atento s de los caracteres que tienen un significado especial a las expresiones regulares (https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/regexp) y tendrá que tomar establecer r demasiado cuidado. También se producirá un error si la longitud s 's es inferior a 2.

Cuestiones relacionadas