2016-01-20 76 views
2

我使用javascript在Node.js中工作。嵌套標記中父匹配值的正則表達式

我想使用正則表達式來獲取父div字符串。

例如:

<div class="first"> 
    <p> sample 1</p> 
    <div class="second"> 
     <p>sample 2</p> 
    </div> 
</div> 

怎樣的正則表達式與類的 「第一」 的div?但在第一格里面,第二格也在那裏。

我想下面的正則表達式

<div class="first">([\s\S]*?)<\/div> 

我得到錯誤的比賽,從第一個div與第二個div接近結束。

任何想法找到父母的div值。

在此先感謝。

更新:同意。 DOM應該解決我的問題。但是我的html格式不正確並且沒有修改。如果我使用DOM讀取文檔,則會出現錯誤。任何替代方法。

+4

您確定無法用任何DOM解析器解析HTML嗎?請檢查[此SO帖子](http://stackoverflow.com/a/7373003/3832970)。 *您可以使用[npm](http://npmjs.org/)模塊[jsdom](https://www.npmjs.org/package/jsdom)和[htmlparser](https://www.npmjs。 org/package/htmlparser)在Node.JS中創建和解析一個DOM。* –

+1

強制鏈接到[bobince對「RegEx匹配開放標記,但XHTML自包含標記除外」的回答](http://stackoverflow.com/a/ 1732454/1509264) – MT0

+0

因爲基於正則表達式的DOM重新解答的問題的答案是不受歡迎的,所以我不會發布解決方案,但你可以適應[這是我的答案](http://stackoverflow.com/questions/34722633/get-all-inner-brackets-parentheses/34723078#34723078)爲你目前的需求。 –

回答

0

你在找什麼是遞歸。 JavaScript的正則表達式不支持遞歸。在事實做支撐遞歸的唯一正則表達式是Perl的5.10和Ruby 2.0 [Source]

這意味着什麼,你是,你需要做以下之一:

  1. 需要正確格式化XML輸入,所以DOM不會崩潰(或修復XML的修改,以便輸出有效的XML)
  2. 手通過計算「div」的數量和隨後的「/ div」數量來解析此數據(這將是一個噩夢)
  3. 使用Perl 5.10+或Ruby 2.0+解析文件並將結果傳遞給您的Javascript程序

可能很清楚,選項是唯一合理的選項。

+0

OP需要的是一個HTML解析器,而不是一個支持遞歸表達式的正則表達式引擎。 – Tomalak

+0

@Tomalak我同意,這就是爲什麼我提出這是「唯一合理的選擇。」 –