簡體   English   中英

與正則表達式不匹配嵌套出現

[英]Not matching nested occurrences with regex

我正在使用JavaScript編寫HTML編輯器,試圖實現撤消功能。

因此,我有以下HTML代碼(帶有用於存儲應用狀態的隱藏注釋):

<!-- RECONSTRUCT: 'test1' -->
<h1>FOO</h1>
<!-- END RECONSTRUCT -->
<h1>BAR</h1>
<!-- RECONSTRUCT: 'test2' -->
<h1>FOOFOO</h1>
<!-- END RECONSTRUCT -->

我需要將其轉換為以下HTML代碼:

test1
<h1>BAR</h1>
test2

因此,基本上,html注釋“保存”舊狀態,我需要將代碼恢復到該狀態。

所以我想要一個正則表達式實現的是:

[0:"test1", 1:"<h1>FOO</h1>", 2:"test2", 3:"<h1>FOOFOO</h1>"]

或類似的東西。

問題是,當我嘗試像這樣使用Regex時:

src.match(/<!-- RECONSTRUCT: '(.*)' -->(.*)<!-- RECONSTRUCT END -->/g)

我懂了

[0: "<!-- RECONSTRUCT: 'test1' --> ... FOO ... BAR <!-- RECONSTRUCT ... FOOFOO ... ->"]

因此是完整的輸入,因為它是有效的匹配。 我也不希望它帶有負面的展望:

<!-- RECONSTRUCT: '(.*)' -->((?!RECONSTRUCT:).)*

在JavaScript中. 不匹配換行符並沒有修飾符( s )可用於覆蓋此行為。 在JavaScript中執行此操作的方法是使用[^]而不是. ,也允許換行符匹配。

還會使某些模式變得懶惰?

 var src = `<!-- RECONSTRUCT: 'test1' --> <h1>FOO</h1> <!-- END RECONSTRUCT --> <h1>BAR</h1> <!-- RECONSTRUCT: 'test2' --> <h1>FOOFOO</h1> <!-- END RECONSTRUCT -->`; src = src.replace( /<!--\\s*RECONSTRUCT:\\s*'(.*?)'\\s*-->[^]*?<!--\\s*END RECONSTRUCT\\s*-->/g, '$1'); console.log(src); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM