我正在尝试使用javascript解析一个html文档,它迟到了,我正在与正则表达式进行一些努力。
我有一份包含以下内容的文件:
<table>
{% for field in fields %}
<tr><td>{{field.label}}</td><td>{{field.value}}</td></tr>
{% endfor %}
</table>
现在我想以某种方式选择{%for field in fields%}和{%endfor%}之间的所有内容,以便我可以在标签和值字段中插入一些假图。然后我想复制这个部分几次,以便它创建所需的虚拟输出。有没有人知道在for和endfor循环标签之间选择所有内容的简单方法?
提前致谢。
答案 0 :(得分:0)
var regex = /(?:{% for field in fields %})([\s\S]*?)(?:{% endfor %})/gim;
var contents = regex.exec(test)[1];
正则表达式的简要说明......
(?:{% for field in fields %})
:非捕获组(?:
)以匹配开头“标记”
([\s\S]*?)
:[\s\S]
匹配JS正则表达式中的任何字符(包括换行符)*
匹配前面字符类?
的0个或多个实例使得匹配变得懒惰(所以在这个例子中,它不会占用结束标记)
(?:{% endfor %})
:非捕获组(?:
)以匹配结束“标记”
标志gim
- 全局(即匹配输入字符串中的所有内容)/ 不区分大小写 / 多行
答案 1 :(得分:0)
您可以使用RegExp组($ 1,$ 2,$ 3):
var html = '{% for field in fields %}'
+ '<tr><td>{{field.label}}</td><td>{{field.value}}'
+ '</td></tr>'
+ '{% endfor %}';
var pattern = /({% for field in fields %})((.|\n)*)({% endfor %})/gi;
pattern.test(html);
var forText = RegExp.$2;
newForText = forText.replace(/{{field.label}}/gi, 'My Label').replace(/{{field.value}}/gi, 'My Value');
console.log('<table>' + newForText + '</table>');