2015-11-15 2 views
0

У меня есть это регулярное выражение в Ruby: http://rubular.com/r/eu9LOQxfTjRegex захвата все между двумя метками на несколько строк

/<sometag>(.*?)<\/sometag>/im 

И успешно соответствует вход, как это:

<sometag> 
    123 
    456 
</sometag> 

Что бы вернуть

123 
456 

Однако, когда я пробую это в javascript (тестирование в хроме), он ничего не соответствует. Многословный флаг javascript означает что-то еще?

Я хочу захватить все, что не жадно, между двумя заданными тегами. Как это сделать в javascript, используя регулярное выражение? Вот Debuggex Demo

<sometag>(.*?)<\/sometag> 

Regular expression visualization

Это не XML разбора.

ответ

2

Javascript не поддерживает многострочные выражения при использовании только .. Вы должны использовать [\s\S] вместо . так пример, который удовлетворяет то, что вы хотите, будет:

var x = "<sometag>\n\ 
    123\n\ 
    456\n\ 
</sometag>"; 

var ans = x.match(/<sometag>([\s\S]*?)<\/sometag>/im).pop(); 

// ans equals " 123 456" 

отмечают, что вам еще нужно модификатор m.

+1

Вы должны объяснить, что JS не поддерживает '.', чтобы пересечь несколько строк из-за отсутствия модификатора dotall. – hwnd

+0

@hwnd хорошая точка, добавлено описание. Вы должны отредактировать правильные ответы, чтобы улучшить их, а не просто уменьшить их. – Macmee

+0

Я не ответил на ваш ответ, просто оставил комментарий. – hwnd

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