2013-05-27 2 views
5

Как игнорировать новую строку в regexp в Javascript?Как игнорировать новую строку в regexp?

, например:

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

Результат: не определено

+0

возможно дубликат [Как использовать JavaScript регулярного выражения на несколько строк?] (Http://stackoverflow.com/questions/1979884/how-to-use-javascript -regex-over-multiple-lines) – Bdfy

ответ

5

Вы пропускаете символ новой строки JS \ в конце линии 2.

Кроме того, изменение регулярное выражение для:

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

В JavaScript нет флаг, чтобы сказать, что RegExp . также должен соответствовать новой строки. Поэтому вам нужно использовать временное решение, например. [\s\S].

Ваш RegExp будет выглядеть следующим образом:

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

Beautiful ........ – deFreitas

1

Лучше вы можете использовать [\s\S] вместо. для многострочного сопоставления.

Это самая распространенная идиома JavaScript для соответствия всем, включая символы новой строки. Это проще на глазах и намного эффективнее, чем подход на основе чередования, такой как (.|\n).

2

Читая это одно: How to use JavaScript regex over multiple lines?

Я пришел с этим, который работает:

var data = "<test>11\n1</test>\n#EXTM3U\n"; 
reg = /<test>([\s\S]*?)<\/test>/; 
var match = data.match(reg); 
console.log(match[1]); 

Вот скрипка: http://jsfiddle.net/Rpkj2/

+0

Откуда вы знаете, что это работает? вы проверяете его скрипкой? –

+0

Добавлена ​​скрипка. – qur2

Смежные вопросы