用javascript选择子字符串

时间:2011-10-31 11:57:06

标签: javascript jquery html regex

我正在尝试使用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循环标签之间选择所有内容的简单方法?

提前致谢。

2 个答案:

答案 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>');