VBS中的多值匹配检查

实际场景中有这样一个需求,判断某个对象的某个属性,如果它的字符串值中包含某些特定的字符串,那么要进行开始过程A,否则开始过程B。

最简单的实现是

vbnet 复制代码
if InStr(obj.title,".大师")<>0 or InStr(obj.title,".统领")<>0 or InStr(obj.title,".丞相")<>0 or InStr(obj.title,".元帅")<>0 or InStr(obj.title,".将军")<>0  then

逻辑是对的,不过每多一个匹配条件,在语句中要加一个or项,用于防御性编程是OK的,一般情况是不推荐这样写的,改成下面这样怎样呢

vbnet 复制代码
Function isleader(title)
	leaderstrs=array(".大师.",".统领",".丞相",".元帅",".将军")
	match=False
	for each item in leaderstrs
		if inStr(title,item) then
			match=True
			Exit For
		end if
	next
	isleader=match
End Function

这样会好一些,主程序里调用即可

vbnet 复制代码
if isleader(obj.title) then

不过这样用字符串数组匹配还不够优化,可以考虑用正则表达式匹配

vbnet 复制代码
Dim re
Set re = New RegExp
re.Pattern = "\.大师|\.统领|\.丞相|\.元帅|\.将军"
re.IgnoreCase = False

后面检查判断用:

vbnet 复制代码
if re.test(obj.title) then

数据放在代码里还是不好,把匹配值移到同文件夹下的配置文件params.js中

vbnet 复制代码
leader = {"title":"\.大师|\.统领|\.丞相|\.元帅|\.将军"}

程序先加载配置文件

vbnet 复制代码
Const ForReading = 1
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextFile = objFSO.OpenTextFile("params.js", ForReading)
strResponses = objTextFile.ReadAll
objTextFile.Close

Set html = CreateObject("htmlfile")
Set window = html.parentWindow
window.execScript strResponses, "JScript" ' 解析 js

Set jsleader = window.leader ' 获取解析后的对象

Dim re
Set re = New RegExp
re.Pattern =  jsleader.title
re.IgnoreCase = False

嗯,这下似乎可以满意了,虽然代码看起来多了一些,不过配置参数和功能逻辑分离是一个好的编程习惯。

相关推荐
唐钰小宝B2 小时前
深度解读 JDK 8、JDK 11、JDK 17 和 JDK 21 的区别
java·开发语言·windows
知识分享小能手3 小时前
C学习教程,从入门到精通,C语言指针 —— 详细知识点总结(10)
c语言·开发语言·学习
熊猫钓鱼>_>3 小时前
开源鸿蒙平台 KMP 三方库 kotlin-csv 适配全流程:从编码假设到沙箱真机互通验证
开发语言·人工智能·华为·kotlin·harmonyos·鸿蒙
张张123y3 小时前
# 后端第七课:FastAPI 实战入门(用刚学的 Python 写第一个 API 接口)
开发语言·python·mysql·api·fastapi
小陈不好吃3 小时前
Java 泛型与类型擦除:从 PECS 原则到 TypeToken 绕过
java·开发语言·windows·pecs 原则·typetoken绕过
Shaoshing3 小时前
存储引擎与架构
java·开发语言·架构
额额额对了4 小时前
Linux 驱动开发:基于 platform 总线 + misc 设备的 DS18B20 单总线温度驱动
linux·c语言·开发语言·驱动开发·嵌入式硬件
devilnumber4 小时前
Java 代理模式(简单理解回顾)
java·开发语言·代理模式
invicinble4 小时前
对服务器资源的理解--理解用户请求,部署,服务器资源相关的映射层
开发语言
漫步人生走在路上4 小时前
用小语种SEO突破外贸B2B天花板:法语、德语市场的实测数据
开发语言·前端·javascript·人工智能·搜索引擎·ecmascript