2012-02-21 12 views
5

tengo esta simple expresión regular para coger el último ejemplo de 'giro a 123' en una forma (no tengo otra expresión regular para el cuerpo principal):Javascript expresiones regulares que no coincida con la última Char en forma

currenttext=currenttext.replace(/([^>])(turn\s+to\s+)(\d+)$/i,"$1<tt ref=\"$3\">$2$3</tt>"); 

que durante ejemplo sustitutos a su vez a 123 ... con

<tt ref="123">turn to 123</tt>... 

... en la entrada de forma viva. Sin embargo, solo funciona si hay algún tipo de carácter después de el número 123, ya sea un retorno de carro o un carácter visible, que no puedo comprender ya que el anclaje $ final del partido claramente no tiene otro carácter antes del patrón de memoria para los dígitos numéricos. Sin un caracter subsiguiente, obtengo este resultado:

<tt ref="12">turn to 12</tt>3 

es decir, falla al capturar el último dígito por completo. He intentado poner el $ ancla dentro de los parens de memoria, pero no hizo ninguna diferencia.

+0

¿En qué navegador? Funciona para mí, debajo del nodo, Chromium y Firefox. –

+1

No puedo replicar este comportamiento, funciona en regexr: http://regexr.com?3031a –

+0

No puedo reproducir esto. Ejecutando el siguiente código en una consola javascript '" foo turn to 123 ".replace (/ ([^>]) (turn \ s + to \ s +) (\ d +) $/i," $ 1 $ 2 $ 3"); 'devuelve' "foo pasa al 123" '. Podría publicar el código que está causando el problema. –

Respuesta

2

Estoy bastante seguro de que no hay nada de malo en esta expresión regular. Debe recibir el texto incorrecto como entrada currenttext. Puede verificar esto revisando el texto actual antes de ejecutar este código (ya sea console.log (currenttext) o alert (currenttext), o algo así).

Cosas a tener en cuenta:

  • ¿Está utilizando subcadena (...) con (inicio, fin) en lugar de (comenzar, terminar + 1)?
  • ¿Está haciendo coincidir el último carácter como un grupo separado en un RegExp?
+1

No tengo ni idea de dónde o qué estaba causando el error ... pero simplemente se fue. Creo que es justo decir que no había nada de malo con la expresión regular de todos modos. – Beeblbrox

Cuestiones relacionadas