2010-04-04 20 views

Antwort

17

Ich kann nicht verstehen, warum dieser Code nicht foo auf bar

ersetzt Weil . der Punkt explizit nicht Spiel Zeilenumbrüche tut .

funktionieren würde diese:

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

weil Zeilenumbrüche als Leerzeichen zählen (\s).

Beachten Sie, dass die Klammern um foo überflüssig sind, Gruppierung hat hier keine Vorteile.

+0

Danke, ich wusste es nicht. In Ruby tut es standardmäßig. –

+0

Nein, tut es nicht. ;) (Testen Sie selbst unter http://rubular.com/) – Tomalak

+5

'[\ s \ S]' ist eine viel bessere Umgehungsmöglichkeit als '(?:. | \ S)'; siehe Erik Corry's Antwort auf diese Frage aus folgendem Grund: http://stackoverflow.com/questions/2407870/javascript-regex-hangs-using-v8 –

19

JavaScript unterstützt keinen Modifikator für alle Punkte. Ein gemeinsamer Ersatz ist:

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

/m^ und $ verhalten macht richtig, aber hat keine Auswirkung auf ..

+1

Great.thank you –