javascript正则表达式之匹配任何字符和非贪婪匹配

 大家看到这个标题会不会说 直接用正则表达式的. 号不就可以了吗 。是的一般代码用就可以了,现在我用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){

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值