2015-11-15 111 views
0

我有這樣的正則表達式在Ruby中:http://rubular.com/r/eu9LOQxfTj正則表達式捕獲一切

/<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

你應該解釋一下,由於沒有dotall修飾符,JS不支持'.'跨越多行。 – hwnd

+0

@hwnd好點,補充說明。你應該編輯正確的答案來改進它們,而不是僅僅對它們進行下調。 – Macmee

+0

我沒有downvote你的答案,只是留下了評論。 – hwnd