为了账号安全,请及时绑定邮箱和手机立即绑定

ASP(VBS)中Replace问题

ASP(VBS)中Replace问题

弑天下 2022-02-25 15:22:59
在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" thentest = "True"elsetest = "False"end functiondim reg:set reg = regExpreg.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的参数!
查看完整描述

2 回答

?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

正确代码如下:
'═════代═══码═══开═══始═════
dim s
s = "Cuilu$Test$007"
function test(str)
if str = "Test" then
test = "True"
else
test = "False"
end if
end function
dim reg
set reg = new regExp
reg.Pattern = "\$(\w+)\$"
Set Matches=reg.Execute(s)
Set oMatch = Matches(0)
'这一个0表示第一个匹配项$test$,vbs中正则比较低级,不能直接识别括号
data=oMatch.SubMatches(0)
'这一个0表示括号的数据test
dim news
news = reg.replace(s,test(data))
msgbox news
'═════代═══码═══结═══束═════

注意这是vbs文件的写法,在asp中有一句话可能不是这样写(set reg = new regExp,你改回你的写法就是,我这样给你是方便你测试,建个vbs文件即可运行看到结果)



查看完整回答
反对 回复 2022-02-28
?
杨魅力

TA贡献1811条经验 获得超6个赞

Function test(matchStr, str, matchPos, sourceStr)
if str = "Test" then
test = "True"
else
test = "False"
End Function
news = reg.replace(s,getRef("test"))
--------------
如果有两个子匹配组,那么Function的参数就变成5个。
3个,参数就是6个,依次类推。
这里的str是第一个子匹配组。



查看完整回答
反对 回复 2022-02-28
  • 2 回答
  • 0 关注
  • 256 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信