una separar quitar manejo descomponer cortar caracteres caracter cadenas cadena buscar all javascript regex regex-negation

javascript - separar - Cómo reemplazar todo PERO la primera aparición de un patrón en una cadena



replace javascript (5)

¿Algo como esto?

"l 5 0 l 0 10 l -5 0 l 0 -10".replace(/[^^]l/g, '''')

Pregunta rápida: mi patrón es una cadena svg y se parece a l 5 0 l 0 10 l -5 0 l 0 -10 Para hacer una comparación de Unittest contra una referencia, necesito deshacerme de todo, pero el primero l sé que puedo deshacerme de ellos todos y poner una ''l'' por adelantado, o puedo usar subcadenas. Pero me pregunto si hay un lenguaje de expresión regular de javascript para esto?


No es la solución más bonita, pero puede reemplazar la primera aparición con algo arbitrario (como un marcador de posición) y reemplazos de cadena para cumplir con el resto de la lógica:

''-98324792u4234jkdfhk.sj.dh-f01'' // construct valid float .replace(/[^/d/.-]/g, '''') // first, remove all characters that aren''t common .replace(/(?!^)-/g, '''') // replace negative characters that aren''t in beginning .replace(''.'', ''%FD%'') // replace first occurrence of decimal point (placeholder) .replace(//./g, '''') // now replace all but first occurrence (refer to above) .replace(/%FD%(0+)?$/, '''') // remove placeholder if not necessary at end of string .replace(''%FD%'', ''.'') // otherwise, replace placeholder with period

Produce:

-983247924234.01

Esto simplemente expande la respuesta aceptada para cualquiera que busque un ejemplo que no pueda depender de que la primera coincidencia / ocurrencia sea el primer carácter de la cadena.


No hay JS RegExp para reemplazar todo, pero el primer patrón de coincidencia. Sin embargo, puede implementar este comportamiento pasando una función como segundo argumento al método de replace .

var regexp = /(foo bar )(red)/g; //Example var string = "somethingfoo bar red foo bar red red pink foo bar red red"; var first = true; //The arguments of the function are similar to $0 $1 $2 $3 etc var fn_replaceBy = function(match, group1, group2){ //group in accordance with RE if (first) { first = false; return match; } // Else, deal with RegExp, for example: return group1 + group2.toUpperCase(); } string = string.replace(regexp, fn_replaceBy); //equals string = "something foo bar red foo bar RED red pink foo bar RED red"

La función ( fn_replaceBy ) se ejecuta para cada coincidencia. En la primera coincidencia, la función regresa inmediatamente con la cadena coincidente (no pasa nada) y se establece un indicador.
Todas las demás coincidencias se reemplazarán de acuerdo con la lógica descrita en la función: Normalmente, usas $0 $1 $2 , etc., para referirte a los grupos. En fn_replaceBy , los argumentos de la función son iguales a estos: Primer argumento = $0 , segundo argumento = $1 , etc.

La subcadena coincidente será reemplazada por el valor de retorno de la función fn_replaceBy . El uso de una función como segundo parámetro para replace permite aplicaciones muy potentes, como un analizador de HTML inteligente .

Ver también: MDN: String.replace> Especificar una función como parámetro


Puedes probar un lookahead negativo, evitando el inicio de la cadena:

/(?!^)l/g

Ver si online: jsfiddle


"l 5 0 l 0 10 l -5 0 l 0 -10".replace(/^/s+/, '''').replace(//s+l/g, '''')

se asegura de que la primera ''l'' no esté precedida por el espacio y elimina cualquier espacio seguido de una ''l'' .