2010-03-16 13 views

Respuesta

12

el punto atrapa todo, excepto los saltos de línea .. (si el dotall es falsa)

así que o bien utilice el dotall (como se ha mencionado en otras respuestas/comentarios esto no es compatible con JavaScript, pero lo haré dejarlo aquí por referencia)

/\/\*(.*)\*\//gs 

o añadir los caracteres de espacio en blanco \s en sus expresiones

/\/\*((\s|.)*?)\*\//g 

Alan mencionado en su comentario una mala actuación de la respuesta que he dado a fin de utilizar la siguiente vez .. (que se traduce en todo espacio en blanco y todo sin espacios en blanco, por lo que todo ..)

/\/\*([\s\S]*?)\*\//g 
+0

No hay modo de 's' (una línea) en JavaScript, y' (. \ S |) 'tribunales retroceso catastrófico. La forma estándar de hacer coincidir cualquier cosa, incluidas las nuevas líneas en JS, es '[\ S \ s]'. –

+0

@alan, ¿algún enlace sobre el seguimiento '' s | .'? me gustaría aprender más al respecto ... –

+1

Erik Corry lo explicó bien aquí: http://stackoverflow.com/questions/2407870/javascript-regex-hangs-using-v8/2408599#2408599 Para una discusión más general de retroceso catastrófico , vea http://www.regular-expressions.info/catastrophic.html –

4

dos problemas:

  1. en JavaScript, no hay modificador dotall. Tendrá que usar un truco para permitir nuevas líneas coincidentes, como usar [^].
  2. Estás usando concordancia codiciosa. Si hay múltiples comentarios en su entrada, se comerá todo entre ellos.

Solución:

/\/\*[^]*?\*\//g 

Ejemplo:

> '/*abc\ncde*/qqq/*iop\n\njj*/'.replace(/\/\*[^]*?\*\//g, '') 
qqq 
+1

+1, modificado para no codicioso .. –

+0

No funciona con comentarios anidados. Pruebe: '/ * abc/* xyz */def/*'. La naturaleza no codiciosa hace que coincida con el primer comentario de inicio con el comentario del 1er final, y luego solo queda 'def '. – InfinitiesLoop

+0

Nunca se preocupe, los comentarios anidados no están permitidos de esa manera. El interior terminará el exterior. – InfinitiesLoop

Cuestiones relacionadas