javascript正则表达式之匹配任何字符和非贪婪匹配
2017-06-19 10:06
447 查看
大家看到这个标题会不会说 直接用正则表达式的. 号不就可以了吗 。是的一般代码用就可以了,现在我用rhino(一种java写的javascript解析器,里面有不少API,如文件读取等,那我们可以用javascript来读取本地文件来进行文件的合并工作了,这个和用windows script 中的new ActiveX('FileSystemObject')也差不多 )。
在读取文件后,里面有许多换行的。比如有一段文本
{{begin GIFT.tmpl.sendListPageDiv}}
<%for(var i=startPage-0;i<=endPage-0;i++){ if(i==curPage){ %>
<strong class="current_page">
<%=i%>
</strong>
<%}else{%>
<a href="javascript:void(0);" page="<%=i%>">
<%=i%>
</a>
<%}}%>
{{end GIFT.tmpl.sendListPageDiv}}
我想把{{begin...}}到{{end...}}中的文件读取出来,对其进行html压缩,读取的时候发现这样用(QZAPP为另人写的一套API,里面的toString函数有html压缩功能)
//s为读取到的文本内容字符串
function replaceStr (s){
return s.replace(/\{\{\s*begin\s+([\.\w]+)\s*\}\}(.*)\{\{\s*end\s+\1\s*\}\}/g, function(a,b,c,d){
var ret = b+'= \''+QZAPP.toString(c)+'\';';
if(c.length == 0){
QZAPP.log("<--error-->:empty replacestr");
}
return ret;
});
}
红色部分这样写发现读取不到内容,查了下书, 点号匹配:除换行符和其他Unicode行终止符之外的任意字符的任意字符,改成
([^]*)
OK 读取到了。
PS:本例子中有一个问题,红色部分是读取任何内容,正则表达式用的是贪婪匹配,如果后部不用唯一标记的匹配法如:
return s.replace(/\{\{\s*begin\s+([\.\w]+)\s*\}\}([^]*)\{\{\s*end\s*\}\}/g, function(a,b,c,d){
,会出现
{{begin GIFT.tmpl.sendListPageDiv}}
。。。。
{{end}}
{{begin GIFT.tmpl.sendListPageDiv2}}
。。。。
{{end}}
绿色部分一直匹配到蓝色那里,当然用非贪婪匹配?就可以了,如
return s.replace(/\{\{\s*begin\s+([\.\w]+)\s*\}\}([^]*?)\{\{\s*end\s*\}\}/g, function(a,b,c,d){
在读取文件后,里面有许多换行的。比如有一段文本
{{begin GIFT.tmpl.sendListPageDiv}}
<%for(var i=startPage-0;i<=endPage-0;i++){ if(i==curPage){ %>
<strong class="current_page">
<%=i%>
</strong>
<%}else{%>
<a href="javascript:void(0);" page="<%=i%>">
<%=i%>
</a>
<%}}%>
{{end GIFT.tmpl.sendListPageDiv}}
我想把{{begin...}}到{{end...}}中的文件读取出来,对其进行html压缩,读取的时候发现这样用(QZAPP为另人写的一套API,里面的toString函数有html压缩功能)
//s为读取到的文本内容字符串
function replaceStr (s){
return s.replace(/\{\{\s*begin\s+([\.\w]+)\s*\}\}(.*)\{\{\s*end\s+\1\s*\}\}/g, function(a,b,c,d){
var ret = b+'= \''+QZAPP.toString(c)+'\';';
if(c.length == 0){
QZAPP.log("<--error-->:empty replacestr");
}
return ret;
});
}
红色部分这样写发现读取不到内容,查了下书, 点号匹配:除换行符和其他Unicode行终止符之外的任意字符的任意字符,改成
([^]*)
OK 读取到了。
PS:本例子中有一个问题,红色部分是读取任何内容,正则表达式用的是贪婪匹配,如果后部不用唯一标记的匹配法如:
return s.replace(/\{\{\s*begin\s+([\.\w]+)\s*\}\}([^]*)\{\{\s*end\s*\}\}/g, function(a,b,c,d){
,会出现
{{begin GIFT.tmpl.sendListPageDiv}}
。。。。
{{end}}
{{begin GIFT.tmpl.sendListPageDiv2}}
。。。。
{{end}}
绿色部分一直匹配到蓝色那里,当然用非贪婪匹配?就可以了,如
return s.replace(/\{\{\s*begin\s+([\.\w]+)\s*\}\}([^]*?)\{\{\s*end\s*\}\}/g, function(a,b,c,d){
相关文章推荐
- 【转】正则表达式匹配包括换行在内的任何字符
- JavaScript正则表达式匹配字符出现次数的问题
- 正则表达式匹配除单词外的任何字符
- jQuery验证,匹配输入非中文的正则表达式,输入内容可以是包括空格等特殊字符的任何字符。
- VIM 用正则表达式,非贪婪匹配,匹配竖杠,竖线, 匹配中文,倒数第二列, 匹配任意一个字符 :
- JavaScript正则表达式的贪婪匹配和非贪婪匹配
- 正则表达式一匹配任何单一字符
- 正则表达式匹配包括换行在内的任何字符
- javascript正则表达式之最长匹配(贪婪匹配)和最短匹配(懒惰匹配)
- Javascript正则表达式匹配中文字符
- Delphi 正则表达式语法(6): 贪婪匹配与非贪婪匹配
- Asp.net的正则表达式,匹配指定的字符和字符串。
- [收藏]匹配Unicode字符的正则表达式
- 正则表达式--递归匹配与非贪婪匹配
- 正则表达式--递归匹配与非贪婪匹配
- 常用正则表达式模式 -- 匹配 Javascript
- PHP匹配UTF-8中文字符的正则表达式
- 寻正则表达式:匹配控制字符
- VBS教程:正则表达式简介 -字符匹配
- javascript 正则表达式中的特殊字符