我有这个正则表达式来扫描我视图中的每个循环,它几乎可以满足我的需求,但并非完全如此。我使用这个正则表达式 atm:
(?=({{each\s+([^{}]*)}}((?>(?!{{#?each).|(?1))*){{#each}}))
当我在另一个每个循环中有一个每个循环时,它会正确显示匹配项,但我不希望每个循环内部都匹配。我计划递归处理第二场比赛。这是一个示例 HTML:
<div class="rows-container">
{{each infoItems}}
<div class="row">
<div class="row-key"></div>
</div>
<div class="sub-container">
{{each subItems}}
<div class="row">
<div class="row-key"></div>
</div>
{{#each}}
</div>
{{#each}}
</div>
<div class="rows-container">
{{each newsItems}}
<div class="row">
<div class="row-key"></div>
</div>
{{#each}}
</div>
会产生以下结果:
//MATCH 1:
1. {{each infoItems}} <div class="row"> <div class="row-key"></div> </div> <div class="sub-container"> {{each subItems}} <div class="row flex-wrap"> <div class="row-key"></div> </div> {{#each}} </div> {{#each}}
2. infoItems
3. <div class="row"> <div class="row-key"></div> </div> <div class="sub-container"> {{each subItems}} <div class="row flex-wrap"> <div class="row-key"></div> </div> {{#each}} </div>
//MATCH 2:
//This is the match I was trying to exclude:
4. {{each subItems}} <div class="row flex-wrap"> <div class="row-key"></div> </div> {{#each}}
5. subItems
6. <div class="row flex-wrap"> <div class="row-key"></div> </div>
//MATCH 3:
7. {{each newsItems}} <div class="row"> <div class="row-key"></div> </div> {{#each}}
8. newsItems
9. <div class="row"> <div class="row-key"></div> </div>
如您所见,我只需要:完整结果(对替换回调很有用)、数组名称和内容。我尝试过对正则表达式感到困惑,
{{each\s+([^{}]*)}}((?>(?!{{#?each).|(?1))*){{#each}}
这只会给出第二个和第三个,而不是第一个 ='(
有没有办法捕捉第一场和第三场比赛?允许内部其他每个循环(现在只需要 1 个内部......),但不匹配它们。一点解释或反馈将不胜感激,但我有一些时间在我手上,我正在解决一个难题。