|          
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]+"与除数字和逗号的字符匹配。 (待续)
 
 |