The RegExpItem() 函数
这也是一个私有函数,它有两个参数,一个是要处理商品名称字符串,一个是要执行的指令:"增加"或"减少",即增加或减少某个商品的数量。是增加还是减少由调用它的函数决定,即传递过来的参数是raise(增加)还是(lower)。下面让我们来看看这个函数:
Private Function RegExpItem(argString, argAction) dim objRegExp, objMatches dim strString, strNewString dim intQty Set objRegExp = New RegExp objRegExp.Pattern = "[^\(\)0-9]+" objRegExp.IgnoreCase = True objRegExp.Global = True Set objMatches = objRegExp.Execute(argString) strString=objMatches.Item(0) objRegExp.Pattern = "[0-9]+" objRegExp.IgnoreCase = True objRegExp.Global = True
Set objMatches = objRegExp.Execute(argString) if objMatches.Count=0 then intQty=1 else intQty=objMatches.Item(0) end if
Select Case argAction Case "lower" if intQty>1 then strNewString=strString & "(" & (intQty-1) & ")" elseif intQty=0 then strNewString=strString else strNewString="" end if Case "raise" strNewString=strString & "(" & (intQty+1) & ")" End Select RegExpItem = strNewString End Function
这个函数有两个参数,argString and argAction,(译者注:以下内容涉及VBSCRIPT中REGEXP对象(正则表达式对象)的知识,关于REGEXP的详细介绍请看http://www.eschool.com.cn/document/20001011/2000101111063201.shtml)。函数首先用EXECUTE方法,在argString参数中按正则表达式模式搜索出符合条件的字串,即把除产品数量以外的内容提取出来,然后把提取出来的字串保存在变量strString中备用。之后再执行一次类似的操作把参数argString中的数字,即商品数量提取出来,保存在变量intQty中。
根据第二个参数是raise(增加)还是lower(减少),函数决定变量intQty进行加1还是减1的操作。然后把变量strString、"("、变量intQty和")"连接起来,返回一个新的字符串:strNewString。
我在写这个函数第一版的时候,只使用了VBSCRIPT的字符串函数,主要是split() 和 join()。这个版本工作的很好,但是代码看起来不很漂亮,而且也不如用REGEXP对象简单易用。因为我没有对两个版本进行过比较,所以我不能说出哪个版本效率更高,但是我听说使用split() 和 join()应该更快一些。
这段代码的特色是非常容易改编。如果你想校验数据的合法性,比如说商品ID号或商品名称,都可以用这段代码。正则表达式"[0-9]+"只与数字匹配,比如说商品ID或商品数量。而另一个正则表达式模式 "[^\(\)0-9]+"与除数字和逗号的字符匹配。 (待续)
|