使用javascript选择子字符串

使用javascript选择子字符串,javascript,jquery,html,regex,Javascript,Jquery,Html,Regex,我正在尝试使用javascript解析html文档,时间不早了,我正努力使用正则表达式 我有一份包含以下内容的文件: <table> {% for field in fields %} <tr><td>{{field.label}}</td><td>{{field.value}}</td></tr> {% endfor %} </table> {字段%中的字段

我正在尝试使用javascript解析html文档,时间不早了,我正努力使用正则表达式

我有一份包含以下内容的文件:

<table>
{% for field in fields %}
<tr><td>{{field.label}}</td><td>{{field.value}}</td></tr>                   
{% endfor %}
</table>

{字段%中的字段为%1}
{{field.label}{{field.value}}
{%endfor%}
现在,我想以某种方式选择{%for fields%}和{%endfor%}之间的所有内容,以便在标签和值字段中插入一些假数字。然后我想复制这个部分几次,以便它创建所需的虚拟输出。有人知道一种简单的方法来选择for和endfor循环标记之间的所有内容吗

提前谢谢

var regex = /(?:{% for field in fields %})([\s\S]*?)(?:{% endfor %})/gim;

var contents = regex.exec(test)[1];
正则表达式的简要说明

(?:{%用于字段%}中的字段)
:非捕获组(
?:
)以匹配开头的“标记”

([\s\s]*?)
[\s\s]
匹配JS正则表达式中的任何字符(包括换行符)
*
匹配前面字符类的0个或多个实例
使匹配延迟(因此在本例中,它不会潜在地消耗结束标记)

(?:{%endfor%})
:与结束“标记”匹配的非捕获组(
?:

Flags
gim
-全局(即匹配输入字符串中的所有项)/不区分大小写/多行

您可以使用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>');
var html='{%for fields%}中的字段
+“{field.label}{{field.value}}”
+ ''
+“{%endfor%}”;
var模式=/({%for%fields%})((.|\n)*)({%endfor%})/gi;
模式测试(html);
var forText=RegExp.$2;
newForText=forText.replace(/{field.label}}/gi,“我的标签”).replace(/{{field.value}}/gi,“我的价值”);
console.log(“”+newForText+“”);

您是否正在尝试创建自己版本的?您可以使用一个相当简单的正则表达式(确保它可以处理换行符),只要您不嵌套这些标记。我认为jquery模板不起作用,因为我事先不知道该部分的标记。在发布的示例中,这两个变量位于一个表行中,但也可能位于div等中。好的,感谢您确认可以使用regex轻松完成这一操作,在睡眠后会找到答案。凯斯金达贪婪。。。这将匹配第一个
{%for…
标记,然后从文档末尾回溯到最后一个出现的
{%endfor%}
,并捕获其间的所有标记(如果文档中只有一个
for
标记,这将很好)…感谢El!使用惰性匹配((\S |\S)*?)它也适用于具有多个for循环的文档。谢谢您的帮助。@Code是的,我会更新。我只是在JSFIDLE中快速测试了它,还没有来得及对多个捕获进行测试。无论如何,应该让它变懒…:)