2014-01-28 97 views
1

我得到了下面的“串”:如何提取两个分隔符之间的所有字符?

<form>{% include '../form.html' %}</form> 

我现在想提取“../form.html”出进口标签的使用javascript:

var regex = /b{\% include | $\%}/i; 

var source = "<form>{% include './form.html' %}</form>"; 

console.log(regex.exec(source)); 

不过我确实有不知道该怎么办^^。我对这个问题有:(?字边界)

  • 如何处理特殊字符(如"{""%"
  • 如果它们出现在一个行如何测试
  • 如何检查发现的一块开始和结束与标签
  • 如何提取"'""'"

UPD之间的串吃了

如果我有一个包含多个外观的整个文本呢?

<form>{% include '../form.html' %}</form> 
<table>{% include '../table.html' %}</table> 
+0

真的没有特殊的正则表达式字符在你使用它们的上下文中。 – sln

回答

2

没有什么特别的事:

var regex = /{% (?:include|import|extends) '([^']+)' %}/gi; 

var source = "<form>{% include './form.html' %} {% import './form2.html' %}</form>"; 

var results = [], found; 
while (found = regex.exec(source)) { 
    results.push(found[1]); 
} 
console.log(results); 
+0

如果我有多个包含,我该怎么办? – bodokaiser

+0

@bodokaiser:像这样:'{%include'./form1.html'%} {%include'./form2.html'%}'或像这样:'{%include'./form1.html'include' ./form2.html'%}'?对于第一个,你只需要把g修饰符放在模式的末尾(用“i”) –

+0

我正在使用/ \ {%(import | include | extends)'([^'] +)' %\}/gi,但仍然只获得'./form.html'(no table.html) – bodokaiser

1

您可以使用:

s="<form>{% include '../form.html' %}</form>"; 
re = /\{% +include +(['"])([^'"]+)\1/; 
fn = s.match(re)[2]; //=> ../form.html 
1

,你可以不喜欢它:

​​
1

你可以只按照输入模式,整场比赛是在第0组
引号之间的部分是组1。

# /<form>{%[ \t]+include[ \t]+'([^']+)'[ \t]+%}<\/form>/ 


<form>{% [ \t]+ include [ \t]+ 
' 
([^']+)       # (1) 
' 
[ \t]+ %}</form> 
相关问题