2010-04-04 7 views

Respuesta

17

No puedo entender por qué este código no pretende sustituir foo en la barra de

Debido a que el punto . hace explícita caracteres de nueva línea no partidos .

Esto funcionaría:

"foo\r\nbar".replace(/foo[\s\S]+/m, "bar") 

ya que los caracteres de nueva línea cuentan como un espacio en blanco (\s).

Tenga en cuenta que los paréntesis alrededor de foo son superfluos, la agrupación no tiene beneficios aquí.

+0

Gracias, no sabía. En ruby ​​lo hace por defecto. –

+0

No, no lo hace. ;) (Pruébalo en http://rubular.com/) – Tomalak

+5

'[\ s \ S]' es una solución mucho mejor que '(?:. | \ S)'; ver la respuesta de Erik Corry a esta pregunta por la razón: http://stackoverflow.com/questions/2407870/javascript-regex-hangs-using-v8 –

19

JavaScript no admite un modificador punto-todo. Un reemplazo común es:

"foo\r\nbar".replace(/(foo)[\s\S]+/, "bar") 

/m hace ^ y $ se comportan correctamente, pero no tiene efecto sobre ..

+1

Great.Thank –

Cuestiones relacionadas