日期:2014-05-16  浏览次数:20769 次

ASP 正则问题
最近在学asp,正则问题一直在困扰着我……

比如在Replace里是如何替换的?

abcd = Replace(abcd,"[最新贴吧_(1)_(2)]",Function((1),(2)))

(1)和(2)是用户随机输入的,function是有参数的call function

后面的function的(1)的(2)是如何随着前面的变化?
asp 正则

------解决方案--------------------
vbscript不是很清楚,javascript的话,在FF下测试

var str="{a},你好!今天是{b}";
str =str.replace(/(\{)([^\}]+)(\})/ig,function (key) {
    console.log(arguments);
    return key;
});



结果是输入的参数为
["{a}", "{", "a", "}", 0, "{a},你好!今天是{b}"]

["{b}","{", "b", "}", 10, "{a},你好!今天是{b}"]
------解决方案--------------------
asp正则不支持函数作为参数的替换

具体使用参考这个:asp 正则表达式对象
------解决方案--------------------
s="[最新贴吧_随机_随机]"
set re = new regexp
re.Pattern = "最新贴吧_(.)+_(.)+"
msgbox re.replace(s, "function($1,$2)")

------解决方案--------------------
	Function fun(a,b)
fun="{最新贴吧:}传入的值分别是a="&a&" b="&b
End function
Dim html,n,i,ii,re
html="这是CMS常用模板引擎方法,建议使用{$article(2,3)}的形式<br/><p>其他html</p>[最新贴吧_(1)_(2)]<div>说明:参数里不建议有(),因为数字需要作参数传给函数[最新贴吧_(10)_(20)]</div>"
Set re=new RegExp
re.IgnoreCase=True
re.Global=True
re.Pattern = "\[最新贴吧_\((\d+)\)_\((\d+)\)\]"
Set ii = re.Execute(html)
If ii.count>0 Then '如果匹配到有
For Each i In ii
html=Replace(html,i.Value,fun(i.SubMatches(0),i.SubMatches(1)))
Next
End If
set re=Nothing
Response.write html

------解决方案--------------------
5#的思路是正确的,你首先要匹配出来才能当参数传参
------解决方案--------------------
re.Pattern = "\[最新贴吧_(\d+)_(\d+)\]"