js如何处理正则表达式中匹配的内容

  有时候需要实现一个功能,使得数据以不同的方式显示,好像有点说不清楚,举个例子吧。

比如:给定一个包含了所有课程的数据,在A页面上是一种排版方式,在B页面上是另外一种排版方式,这时候可以采用模板的方式将数据渲染到页面上。但是这就涉及到一个模板的创建和解析的问题。

  我这里自定义了在html标签中嵌入变量的方式是这样的:<div>{list}</div>,等渲染到页面时,将{}所包含的变量转换为具体的值,这样就可以简单实现模板解析的过程。那如何将其中的变量转换为实际值呢?一种简易的方式是通过正则表达式,将{list}变为list,然后再对其赋值。具体方法如下:

1 var template = '<div>{list}</div>';  
2 var result = template.replace(/{(\S+)}/g, "$1"});

  这样便可得到<div>list</div>,但是渲染到页面后,发现页面只是原封不动地显示'list'字符串,而并未将list变成实际值,即没有将其当作变量看待。也许你会想到用eval("$1")方法来将其转化为变量,但是会发现浏览器会报错说,$1未定义,是因为它会误认为$1为变量,但实际上不是。那该怎么办呢?通过替换成函数即可,具体如下:

1 var result = template.replace(/{(\S+)}/g, function(val, replacement) {return eval(replacement);});

若想对匹配的值做些额外的处理,可以采取这种方式,将处理的过程写到function里,val是被匹配的值,replacement则是匹配、替换的值,处理过后,直接返回想要的值就好了。

  

posted @ 2012-03-11 03:37  bilipan  阅读(2171)  评论(0编辑  收藏  举报