ASP(VBS)中Replace问题

在JS,Replace可以将$n(SubMatches)传递给Function,如:
var s = "Cuilu$Test$007"
function test(str){
if(str == "Test"){
return "True"
}else{
return "False"
}
}
var news = s.replace(/\$(\w)+\$/ig,test("$1"))
//news的值将是s中的$Test$被替换成True后的CuiluTrue007
而在ASP(VBS)中,如
dim s:s = "Cuilu$Test$007"
function test(str)
if str = "Test" then
test = "True"
else
test = "False"
end function
dim reg:set reg = regExp
reg.Pattern = "\$(\w+)\$"
dim news:news = reg.replace(s,test("$1"))
'news的值将是s中的$Test$被替换成False后的CuiluTrue007
我分别获取了一下JS和VBS中Function接收到的Arguments
其中JS接到到的Argument为 Test
而VBS中function接收到的则是$1
很明显VBS将$1做为普通字符串传递了,而JS中则是SubMatches对象中第一次匹配到的传递
请高手提示一下,怎么在ASP的Replace中,也让$n为匹配到的SubMatch传递给替换Function的参数!

弑天下
浏览 257回答 2
2回答

潇潇雨雨

正确代码如下:'═════代═══码═══开═══始═════dim ss = "Cuilu$Test$007"function test(str)if str = "Test" thentest = "True"elsetest = "False"end ifend functiondim regset reg = new regExpreg.Pattern = "\$(\w+)\$"Set Matches=reg.Execute(s)Set oMatch = Matches(0)'这一个0表示第一个匹配项$test$,vbs中正则比较低级,不能直接识别括号data=oMatch.SubMatches(0)'这一个0表示括号的数据testdim newsnews = reg.replace(s,test(data))msgbox news'═════代═══码═══结═══束═════注意这是vbs文件的写法,在asp中有一句话可能不是这样写(set reg = new regExp,你改回你的写法就是,我这样给你是方便你测试,建个vbs文件即可运行看到结果)

杨魅力

Function test(matchStr, str, matchPos, sourceStr)if str = "Test" thentest = "True"elsetest = "False"End Functionnews = reg.replace(s,getRef("test"))--------------如果有两个子匹配组,那么Function的参数就变成5个。3个,参数就是6个,依次类推。这里的str是第一个子匹配组。
打开App,查看更多内容
随时随地看视频慕课网APP