作者:阿赖 (Email: A at Lai.com.cn 主页:http://www.9499.net Blog: http://blog.csdn.net/laily/ )
关键字:正则表达式 VB VBSCRIPT Javascript
摘要:javascript正则表达式到VBScript正则表达式的转换,兼谈VB里正则表达式的用法。
之前用javascript写过将路径拆分为根目录和子目录串的正则表达式算法。因项目需要将同样的功能用VBScript写出来。下面是原来写JSScript的程序:
//purpose:to setparate the path string into two part:the root and the subfolder
// ie.
// c:/aa/bb/cc => c:/ + aa/bb/cc
// //aa/bb/cc => //aa + bb/cc
// http://www.9499.net => http:// + www.9499.net
var strRoot,strSub
var re=/^([^//^//]+[]+|[^//]+)(.*)$/
if(re.test(strFolder))
{
strRoot=RegExp.$1
strSub=RegExp.$2
}
由于Javascript语言集成了正则表达式的功能,写起来感觉顺畅自然。而VB6里要使用正则表达式只能通过组件对象调用的形式来调用VBScript的正则表达式功能。在VB6的IDE里选择project(项目)->references(引用),找到并选上Microsoft VBSCript Regular Expression。注意到这个里面有两个版本可供选择,一个是1.0,另一个是5.5,我们当然选择5.5了。这两个版本的区别是1.0比5.5少了子匹配submatchs的功能。如果选1.0的话是实现不了上面这段javascript代码的功能的,因为其中关键之处就是用到了子匹配submatchs。
下面就是跟上面jscript同样功能的vbscript的程序代码:
'purpose:to setparate the path string into two part:the root and the subfolder
' ie.
' c:/aa/bb/cc => c:/ + aa/bb/cc
' //aa/bb/cc => //aa + bb/cc
' http://www.9499.net => http:// + www.9499.net
Dim strRoot, strSub
Dim regPathParse
Dim reMatch, reMatchCol, reSubMatch
re.Pattern = "^([^//^//]+[]+|[^//]+)(.*)$"
Set reMatchCol = re.Execute(strFolder)
If reMatchCol.Count = 1 Then
Set reMatch = reMatchCol(0)
Set reSubMatch = reMatch.SubMatches
If reSubMatch.Count = 2 Then
strRoot = reSubMatch(0)
strSub = reSubMatch(1)
End If
End If
怎么样,jscript正则表达式的写法是不是比VBS简洁很多呢。