通过正则表达式仅匹配{{#if}}...{{/if}}
个标签很容易。但是,如果此标记的内容可能还包含各种IF标记,我该怎么办?
{{#if name}}
Hello {{name}},
{{#if age}}
You are {{age}} years old.
{{/if}}
{{/if}}
我的方法失败了:http://www.regexr.com/39s9k
/(?:{{#if(?: *))(.*)(?: *)}}([\s\S]*?)(?:{{\/if}})/g
它被假设匹配整个IF块。从上到下,包括中间的IF
答案 0 :(得分:0)
对于仍在寻找此问题解决方案的所有人: 我无法用JS-RegEx做到这一点,所以我这样做了:
搜索字符串
中的所有{{#if ...}}
- 标签
/(?:{{#if(?: *))(.*)(?: *)}}/g
将匹配项替换为{##0##}
,每个标记都有一个索引。同时将语句($1
)保存到数组中,以便稍后通过索引访问它。
遍历数组向后并为每个项目执行此操作:
str = str.replace(new RegExp('{##'+i+'##}([\\s\\S]*?){{\\/if}}', 'g'), "{##"+i+"##}$1{##/"+ i +"##}");
它的作用是用匹配的数字替换所有{{/if}}
- 结束标记。
对于此步骤,向后迭代非常重要。
现在您可以使用
匹配/替换标签/{##(\d)##}([\s\S]*){##\/\1##}/g