[英]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.