2013-05-27 14 views
5

Jak zignorować znak nowej linii w regexp w JavaScript?Jak zignorować znak nowej linii w wyrażeniu regularnym?

na przykład:

data = "\ 
    <test>11\n 
    1</test>\n\ 
    #EXTM3U\n\ 
" 
var reg = new RegExp("\<" + "test" + "\>(.*?)\<\/" + "test" + "\>") 
var match = data.match(reg) 
console.log(match[1]) 

wynik: niezdefiniowana

+0

możliwe duplikat [Jak korzystać regex JavaScript nad wieloma liniami?] (Http://stackoverflow.com/questions/1979884/how-to-use-javascript -regex-over-multiple-lines) – Bdfy

Odpowiedz

5

tracisz JS znak nowej linii \ na końcu linii 2.

Również zmiana regexp do:

var data = "\ 
    <test>11\n\ 
    1</test>\n\ 
    #EXTM3U\n\ 
"; 
var reg = new RegExp(/<test>(.|\s)*<\/test>/); 
var match = data.match(reg); 
console.log(match[0]); 

http://jsfiddle.net/samliew/DPc2E/

5

W JavaScript nie jest flaga powiedzieć RegExp że . również powinny pasować do nowej linii. Więc musisz użyć obejścia, np. [\s\S].

Twój RegExp będzie wtedy wyglądać w ten sposób:

var reg = new RegExp("\<" + "test" + "\>([\\s\\S]*?)\<\/" + "test" + "\>"); 
+0

Piękne ........ – deFreitas

1

Lepiej można użyć [\s\S] zamiast. do dopasowywania wielowierszowego.

Jest to najpopularniejszy język JavaScript do dopasowywania wszystkiego, w tym znaków nowej linii. Jest to łatwiejsze dla oczu i znacznie wydajniejsze niż alternatywne podejście, takie jak (.|\n).

Powiązane problemy