标题：RegExp
正则表达式
今天写程序的时候出现了一个问题，总是出现不允许操作的对象的错误，很奇怪之前一直运行没有问题的程序，怎么会有不允许操作的对象呢？只能一步一步的查到底是那个对象不允许操作了，终于找到了这个对象，Set regEx = New RegExp，把所有的文件搜索了一遍，也没有发现 RegExp，怪不得会出现不允许操作的对象了。
上网搜索RegExp，原来这是一个VBScript5.0的正则表达式对象。只要你的服务器安装了IE5.x，就会VBScript5.0。VB中的replace和execute函数可以执行，那么这个为什么不能执行呢？猜想可能是改对象需要注册组件，开始-运行：regsvr32 vbscript.dll 就OK了。
问题解决了，那么RegExp该如何使用呢？在网上找到了相关的说明。
我们在制作网站的时候，尤其是各种电子商务网站，首先都会让用户填写一些表格来获取注册用户的各种信息，因 为用户有可能输入各式各样的信息，而有些不符合要求的数据会给我们的后端ASP处理程序带来不必要的麻烦，甚至导致网站出现一些安全问题。因此我们在将这 些信息保存到网站的数据库之前，要对这些用户所输入的信息进行数据的合法性校验，以便后面的程序可以安全顺利的执行。所以我们一般会在后端编写一个ASP 的校验程序来分析用户输入的数据是否是合法的。
或许有人会问了，使用运行在客户端的JavaScript不是可以更好更快的 来校验用户的数据吗？的确，这样在大多的情况下是可以的，为什么是大多情况下呢？因为你编写的JavaScript不一定可以完全正常的同时运行在IE以 及Netscape上面，因为微软的Jscript并不全和JavaScript相同，再加上还有一些浏览器不一定和微软以及Netscape兼容的很 好，所以很有可能在客户端的Javascript不会精确的校验用户输入的各种数据，而ASP程序是运行在服务器端的，只是和你的服务器的环境有关，无论 客户端是什么浏览器，对于你的ASP程序来说都是没有分别的，所以选择使用后端的ASP程序来进行数据合法性的校验是一个好的选择。
在使用ASP来进行后端的数据合法性校验的时候，有些人为满足不同环境下面的数据校验，编写了很多的函数来实现，比如，我们想要校验用户输入的URL 地址是否合法，是可以自己编写一段代码来逐个逐个字符的分析用户输入的信息，要分析的信息量小了，那还比较好办，若是分析的条件千变万化，那可就惨了，不 但要编写很长很繁琐的代码，而且运行的效率极其低下，有没有好的解决办法呢？有，那就是VBScritp5.0提供的“正则表达式”对象，只要你的服务器 安装了IE5.x，就会带VBScript5.0。其实，“正则表达式”原本是Unix下面的专利，尤其是在Perl语言中使用的最为广泛，正是由于“正 则表达式”的强大功能，才使得微软慢慢将正则表达式对象移植到了视窗系统上面，利用
“正则表达式”对象，我们就可以非常方便的对各种数据进行合法性的校验了。
首先，让我们来了解一下究竟什么是VBScript的“正则表达式”对象，我们先来看一段程序：
Function CheckExp(patrn,strng)
Dim regEx,Matches　 ' 建立变量。
Set regEx = New RegExp '建立正则表达式。
regEx.Pattern = patrn'设置模式。
regEx.IgnoreCase = true'设置是否区分字符大小写。
regEx.Global = True'设置全局可用性。
Matches = regEx.test(strng) 　'执行搜索。
CheckExp = matches
End Function
在这段程序中，我们看到可以使用“New RegExp”来得到一个正则表达式对象，然后对这个对象进行正则匹配模板的赋值，也就是告诉正则表达式对象，你想要匹配一个什么样子的模板，然后使用方法Test来检测待处理的数据究竟和我们给出的模版是否相匹配，如果不匹配，那就表明待处理的数据不是合法的数据，从而也就实现了数据合法性的校验，我们 可以看出，使用一个设计合理的匹配模板，我们可以轻松的校验一批格式类似的数据信息。
当然，VBScript5.0中的“正则表达式”对象还有很多的其他的方法和属性，比如方法Replace（），利用他我们就可以很快的实现现在网上很时髦的UBB风格的论坛以及BBS，这不 在我们讨论范围之内，以后再加以论述，我们现在就看看在数据校验方面正则表达式对象常用的方法和属性：
常用方法：Execute 方法
描述：对指定的字符串执行正则表达式搜索。
语法：object.Execute(string）　Execute 方法的语法包括以下几个部分：
object：必需的。总是一个 RegExp 对象的名称。
string：必需的。要在其上执行正则表达式的文本字符串。
说明：正则表达式搜索的设计模式是通过 RegExp 对象的 Pattern 来设置的。Execute 方法返回一个
Matches 集合，其中包含了在 string 中找到的每一个匹配的 Match 对象。如果未找到匹配，Execute 将返回空的 Matches 集合。
Test方法
描述：对指定的字符串执行一个正则表达式搜索，并返回一个 Boolean 值指示是否找到匹配的模式。
语法：object.Test(string)
Test 方法的语法包括以下几个部分：
object：必需的。总是一个 RegExp 对象的名称。
string：必需的。要执行正则表达式搜索的文本字符串。
说明：正则表达式搜索的实际模式是通过RegExp对象的Pattern属性来设置的。RegExp.Global属性对Test方法没有影响。如果找到了匹配的模式，Test方法返回True；否则返回False。
常用属性：Global属性
描述：设置或返回一个 Boolean 值，该值指明在整个搜索字符串时模式是全部匹配还是只匹配第一个。
语法：object.Global [= True | False ]
object 参数总是 RegExp 对象。如果搜索应用于整个字符串，Global 属性的值为 True，否则其值为 False。默认的设置为 False。
IgnoreCase属性
描述：设置或返回一个Boolean值，指明模式搜索是否区分大小写。
语法：object.IgnoreCase [= True | False ]
object 参数总是一个 RegExp 对象。如果搜索是区分大小写的，则 IgnoreCase 属性为 False；否则为 True。缺省值为 False。
Pattern属性
描述：设置或返回被搜索的正则表达式模式。这是一个最重要的属性，我们主要是设置这个属性来实现数据校验的。
语法：object.Pattern [= "searchstring"]
Pattern 属性的语法包含以下几个部分：
object：必需的。总是一个 RegExp 对象变量。
searchstring：可选的。被搜索的正则字符串表达式。它可能包含设置部分表格中的各种正则表达式字符。
设置：在书写正则表达式的模式时使用了特殊的字符和序列。下表描述了可以使用的字符和序列，并给出了实例。
字符描述：\：将下一个字符标记为特殊字符或字面值。例如"n"与字符"n"匹配。"\n"与换行符匹配。序列"\"与"\"匹配，"\("与"("匹配。
^ ：匹配输入的开始位置。
$ ：匹配输入的结尾。
* ：匹配前一个字符零次或几次。例如，"zo*"可以匹配"z"、"zoo"。
+ ：匹配前一个字符一次或多次。例如，"zo+"可以匹配"zoo",但不匹配"z"。
? ：匹配前一个字符零次或一次。例如，"a?ve?"可以匹配"never"中的"ve"。
.：匹配换行符以外的任何字符。
（pattern) 与模式匹配并记住匹配。匹配的子字符串可以从作为结果的 Matches 集合中使用 Item [0]...[n]取得。如果要匹配括号字符（和），可使用"\(" 或 "\)"。
x|y：匹配 x 或 y。例如 "z|food" 可匹配 "z" 或 "food"。"(z|f)ood" 匹配 "zoo" 或 "food"。
：n 为非负的整数。匹配恰好n次。例如，"o" 不能与 "Bob 中的 "o" 匹配，但是可以与"foooood"中的前两个o匹配。
：n 为非负的整数。匹配至少n次。例如，"o"不匹配"Bob"中的"o"，但是匹配"foooood"中所有的o。"o"等价于"o+"。"o"等价于"o*"。
：m 和 n 为非负的整数。匹配至少 n 次，至多 m 次。例如，"o" 匹配 "fooooood"中前三个o。"o"等价于"o?"。
[xyz] ：一个字符集。与括号中字符的其中之一匹配。例如，"[abc]" 匹配"plain"中的"a"。
[^xyz] ：一个否定的字符集。匹配不在此括号中的任何字符。例如，"[^abc]" 可以匹配"plain"中的"p".
[a-z] ：表示某个范围内的字符。与指定区间内的任何字符匹配。例如，"[a-z]"匹配"a"与"z"之间的任何一个小写字母字符。
[^m-z] ：否定的字符区间。与不在指定区间内的字符匹配。例如，"[m-z]"与不在"m"到"z"之间的任何字符匹配。
\b ：与单词的边界匹配，即单词与空格之间的位置。例如，"er\b" 与"never"中的"er"匹配，但是不匹配"verb"中的"er"。
\B ：与非单词边界匹配。"ea*r\B"与"never early"中的"ear"匹配。
\d ：与一个数字字符匹配。等价于[0-9]。
\D ：与非数字的字符匹配。等价于[^0-9]。
\f ：与分页符匹配。
\n ：与换行符字符匹配。
\r ：与回车字符匹配。
\s ：与任何白字符匹配，包括空格、制表符、分页符等。等价于"[ \f\n\r\t\v]"。
\S ：与任何非空白的字符匹配。等价于"[^ \f\n\r\t\v]"。
\t ：与制表符匹配。
\v ：与垂直制表符匹配。
\w ：与任何单词字符匹配，包括下划线。等价于"[A-Za-z0-9_]"。
\W ：与任何非单词字符匹配。等价于"[^A-Za-z0-9_]"。
\num ：匹配 num个，其中 num 为一个正整数。引用回到记住的匹配。例如，"(.)"匹配两个连续的相同的字符。
\n：匹配 n，其中n 是一个八进制换码值。八进制换码值必须是 1,2 或 3 个数字长。
例如，"" 和 "1" 都与一个制表符匹配。"11"等价于"1" 与 "1"。八进制换码值不得超过 256。否则，只有前两个字符被视为表达式的一部分。允许在正则表达式中使用ASCⅡ码。
\xn：匹配n，其中n是一个十六进制的换码值。十六进制换码值必须恰好为两个数字长。例如，"\x41"匹配"A"。"\x041"等价于"\x04" 和 "1"。允许在正则表达式中使用 ASCⅡ 码。
好了，常用的方法和属性就是这些了，上面的语法介绍的已经很详细了，我们就没有必要在啰嗦了，接下来我们来看看在具体的例子里面如何使用这些方法和属性来 校验数据的合法性，我们还是举个例子吧，比如，我们想要对用户输入的电子邮件进行校验，首先，一个合法的电子邮件地址至少应当满足以下几个条件：
⒈ 必须包含一个并且只有一个符号“@”
⒉ 必须包含至少一个至多三个符号“.”
⒊ 第一个字符不得是“@”或者“.”
⒋ 不允许出现“@.”或者.@
⒌ 结尾不得是字符“@”或者“.”
所以根据以上的原则和上面表中的语法，我们很容易的就可以得到需要的模板如下："(\w)+[@](\w)+[.](\w)+"
接下来我们仔细分析一下这个模板，首先“\w”表示邮件的开始字符只能是包含下划线的单词字符，这样，满足了第三个条件；“[@]”表示在电子邮件中应 当匹配并且只能匹配一次字符“@”，满足了条件一；同样的“[.]”表示在电子邮件中至少匹配1个至多匹配3个字符“.” ，满足了第二个条件；模板最后的“（\w)+”表示结尾的字符只能是包含下划线在内的单词字符，满足了条件五；模板中间的“（\w)+”满足了条件四。
然后，我们就直接调用刚才的那个函数CheckExp("(\w)+[@](\w)+[.](\w)+",待校验的字符串）就好了，如果返回True就 表示数据是合法的，否则就是不正确的，怎么样，简单吧。我们还可以写出来校验身份证号码的模板："([0-9])"；校验URL的模板："^http: //((\w)+[.])"等等；我们可以看到，这些模板为我们提供了很好的可重利用的模块，利用自己或者别人提供的各种模板，我们就可以方便快捷的进行 数据的合法性校验了，相信你一定会写出非常通用的模板的。
这样，我们只要定制不同的模板，就可以实现对不同数据的合法性校验了。所以，正则表达式对象中最重要的属性就是：“Pattern”属性，只要真正掌握了这个属性，才可以自由的运用正则表达式对象来为我们的数据校验进行服务。-------------------------------------------RegExp对象提供简单的正则表达式支持功能。
RegExp对象的用法：
Function RegExpTest(patrn,strng) 
Dim regEx,Match,Matches ' 建立变量。
Set regEx = New RegExp ' 建立正则表达式。
regEx.Pattern = patrn ' 设置模式。
regEx.IgnoreCase = True ' 设置是否区分字符大小写。
regEx.Global = True ' 设置全局可用性。
Set Matches = regEx.Execute(strng) ' 执行搜索。
For Each Match in Matches ' 遍历匹配集合。
RetStr = RetStr & "Match found at position " 
RetStr = RetStr & Match.FirstIndex & ". Match Value is '" 
RetStr = RetStr & Match.Value & "'." & vbCRLF 
Next 
RegExpTest = RetStr 
End Function 
MsgBox(RegExpTest("is.","IS1 is2 IS3 is4")) 
RegExp 对象的属性 
◎ Global属性 
Global属性设置或返回一个 Boolean 值，该值指明在整个搜索字符串时模式是全部匹配还是只匹配第一个。
语法 
object.Global [= True | False ] 
object 参数总是 RegExp 对象。如果搜索应用于整个字符串，Global 属性的值为 True，否则其值为 False。默认的设置为 True。
Global 属性的用法（改变赋予 Global 属性的值并观察其效果）：
Function RegExpTest(patrn,strng) 
Dim regEx ' 建立变量。
Set regEx = New RegExp ' 建立规范表达式。
regEx.Pattern = patrn ' 设置模式。
regEx.IgnoreCase = True ' 设置是否区分字母的大小写。
regEx.Global = True ' 设置全程性质。
RegExpTest = regEx.Execute(strng) ' 执行搜索。
End Function 
MsgBox(RegExpTest("is.","IS1 is2 IS3 is4")) 
◎ IgnoreCase属性 
IgnoreCase属性设置或返回一个Boolean值，指明模式搜索是否区分大小写。
语法 
object.IgnoreCase [= True | False ] 
object 参数总是一个 RegExp 对象。如果搜索是区分大小写的，则 IgnoreCase 属性为 False；否则为 True。缺省值为 True。
IgnoreCase 属性的用法（改变赋予 IgnoreCase 属性的值以观察其效果)：
Function RegExpTest(patrn,strng) 
Dim regEx ' 建立变量。
Set regEx = New RegExp ' 建立正则表达式。
regEx.Pattern = patrn ' 设置模式。
regEx.IgnoreCase = True ' 设置是否区分大小写。
RegExpTest = regEx.Execute(strng) ' 执行搜索。
End Function 
MsgBox(RegExpTest("is.","IS1 is2 IS3 is4")) 
◎ Pattern属性 
Pattern属性设置或返回被搜索的正则表达式模式。
语法 
object.Pattern [= "searchstring"] 
Pattern 属性的语法包含以下几个部分：
语法说明：
object 必需的。总是一个 RegExp 对象变量。
searchstring 可选的。被搜索的正则字符串表达式。它可能包含设置部分表格中的各种正则表达式字符。
设置 
在书写正则表达式的模式时使用了特殊的字符和序列。下面描述了可以使用的字符和序列，并给出了实例。
\ 将下一个字符标记为特殊字符或字面值。例如"n"与字符"n"匹配。"\n"与换行符匹配。序列"\"与"\"匹配对面，"\("与"("匹配。
^ 匹配输入的开始位置。
$ 匹配输入的结尾。
* 匹配前一个字符零次或几次。例如，"zo*"可以匹配"z"、"zoo"。
+ 匹配前一个字符一次或多次。例如，"zo+"可以匹配"zoo",但不匹配"z"。
? 匹配前一个字符零次或一次。例如，"a?ve?"可以匹配"never"中的"ve"。
. 匹配换行符以外的任何字符。
（pattern) 与模式匹配并记住匹配。匹配的子字符串可以从作为结果的 Matches 集合中使用 Item [0]...[n]取得。如果要匹配括号字符（和），可使用"\(" 或 "\)"。
x|y 匹配 x 或 y。例如 "z|food" 可匹配 "z" 或 "food"。"(z|f)ood" 匹配 "zoo" 或 "food"。
n 为非负的整数。匹配恰好n次。例如，"o" 不能与 "Bob 中的 "o" 匹配，但是可以与"foooood"中的前两个o匹配。
{n,} n 为非负的整数。匹配至少n次。例如，"o{2,}"不匹配"Bob"中的"o"，但是匹配"foooood"中所有的o。"o{1,}"等价于"o+"。"o{0,}"等价于"o*"。
{n,m} m 和 n 为非负的整数。匹配至少 n 次，至多 m 次。例如，"o{1,3}" 匹配 "fooooood"中前三个o。"o{0,1}"等价于"o?"。
[xyz] 一个字符集。与括号中字符的其中之一匹配。例如，"[abc]" 匹配"plain"中的"a"。
[^xyz] 一个否定的字符集。匹配不在此括号中的任何字符。例如，"[^abc]" 可以匹配"plain"中的"p". 
[a-z] 表示某个范围内的字符。与指定区间内的任何字符匹配。例如，"[a-z]"匹配"a"与"z"之间的任何一个小写字母字符。
[^m-z] 否定的字符区间。与不在指定区间内的字符匹配。例如，"[m-z]"与不在"m"到"z"之间的任何字符匹配。
\b 与单词的边界匹配，即单词与空格之间的位置。例如，"er\b" 与"never"中的"er"匹配，但是不匹配"verb"中的"er"。
\B 与非单词边界匹配。"ea*r\B"与"never early"中的"ear"匹配。
\d 与一个数字字符匹配。等价于[0-9]。
\D 与非数字的字符匹配。等价于[^0-9]。
\f 与分页符匹配。
\n 与换行符字符匹配。
\r 与回车字符匹配。
\s 与任何白字符匹配，包括空格、制表符、分页符等。等价于"[ \f\n\r\t\v]"。
\S 与任何非空白的字符匹配。等价于"[^ \f\n\r\t\v]"。
\t 与制表符匹配。
\v 与垂直制表符匹配。
\w 与任何单词字符匹配，包括下划线。等价于"[A-Za-z0-9_]"。
\W 与任何非单词字符匹配。等价于"[^A-Za-z0-9_]"。
\num 匹配 num个，其中 num 为一个正整数。引用回到记住的匹配。例如，"(.)"匹配两个连续的相同的字符。
\n 匹配 n，其中n 是一个八进制换码值。八进制换码值必须是 1,2 或 3 个数字长。例如，"" 和 "1" 都与一个制表符匹配。"11"等价于"1" 与 "1"。八进制换码值不得超过 256。否则，只有前两个字符被视为表达式的一部分。允许在正则表达式中使用ASCⅡ码。
\xn 匹配n，其中n是一个十六进制的换码值。十六进制换码值必须恰好为两个数字长。例如，"\x41"匹配"A"。"\x041"等价于"\x04" 和 "1"。允许在正则表达式中使用 ASCⅡ 码。
Pattern 属性的用法：
Function RegExpTest(patrn,strng) 
Dim regEx ' 建立变量。
Set regEx = New RegExp ' 建立正则表达式。
regEx.Pattern = patrn ' 设置模式。
regEx.IgnoreCase = True ' 设置是否区分大小写。
RegExpTest = regEx.Execute(strng) ' 执行搜索。
End Function 
MsgBox(RegExpTest("is.","IS1 is2 IS3 is4")) 
RegExp对象的方法 
◎ Execute方法 
Execute方法对指定的字符串执行正则表达式搜索。
语法 
object.Execute(string) 
语法部分描述 
object 必需的。总是一个 RegExp 对象的名称。
string 必需的。要在其上执行正则表达式的文本字符串。
说明 
正则表达式搜索的设计模式是通过 RegExp 对象的 Pattern 来设置的。
Execute 方法返回一个 Matches 集合，其中包含了在 string 中找到的每一个匹配的 Match 对象。如果未找到匹配，Execute 将返回空的 Matches 集合。
Execute 方法的用法：
Function RegExpTest(patrn,strng) 
Dim regEx ' 建立变量。
Set regEx = New RegExp ' 建立正则表达式。
regEx.Pattern = patrn ' 设置模式。
regEx.IgnoreCase = False ' 设置区分大小写。
regEx.Global = True ' 搜索全部匹配。
RegExpTest = regEx.Execute(strng) ' 执行搜索。
End Function 
MsgBox(RegExpTest("is.","IS1 is2 IS3 is4")) 
◎ Replace方法 
Replace方法替换在正则表达式查找中找到的文本。
语法 
object.Replace(string1,string2） 
语法部分描述 
object 必需的。总是一个 RegExp 对象的名称。
string1 必需的。string1 是将要进行文本替换的字符串。
string2 必需的。string2 是替换文本字符串。
说明 
被替换的文本的实际模式是通过 RegExp 对象的 Pattern 属性设置的。
Replace 方法返回 string1 的副本，其中的 RegExp.Pattern 文本已经被替换为 string2。如果没有找到匹配的文本，将返回原来的 string1 的副本。
eplace 方法的用法：
Function ReplaceTest(patrn,replStr) 
Dim regEx,str1 ' 建立变量。
str1 = "The quick brown fox jumped over the lazy dog." 
Set regEx = New RegExp ' 建立正则表达式。
regEx.Pattern = patrn ' 设置模式。
regEx.IgnoreCase = True ' 设置是否区分大小写。
ReplaceTest = regEx.Replace(str1,replStr) ' 作替换。
End Function 
MsgBox(ReplaceTest("fox","cat")) 
' 将 'fox' 替换为 'cat'。
；另外，Replace 方法在模式中替换 subexpressions。下面对以前示例中函数的调用，替换了原字符串中的所有字对：
MsgBox(ReplaceText("(\S+)(\s+)(\S+)","")) ' Swap pairs of words. 
◎ Test方法 
Test方法对指定的字符串执行一个正则表达式搜索，并返回一个 Boolean 值指示是否找到匹配的模式。
语法 
object.Test(string) 
语法部分描述 
object 必需的。总是一个 RegExp 对象的名称。
string 必需的。要执行正则表达式搜索的文本字符串。
说明 
正则表达式搜索的实际模式是通过RegExp对象的Pattern属性来设置的。RegExp.Global属性对Test方法没有影响。
如果找到了匹配的模式，Test方法返回True；否则返回False。
Test 方法的用法：
Function RegExpTest(patrn,strng) 
Dim regEx,retVal ' 建立变量。
Set regEx = New RegExp ' 建立正则表达式。
regEx.Pattern = patrn ' 设置模式。
regEx.IgnoreCase = False ' 设置是否区分大小写。
retVal = regEx.Test(strng) ' 执行搜索测试。
If retVal Then 
RegExpTest = "找到一个或多个匹配。" 
Else 
RegExpTest = "未找到匹配。" 
End If 
End Function 
MsgBox(RegExpTest("is.","IS1 is2 IS3 is4")) 
RegExp 对象
构造函数
new RegExp（“表达式”，”属性”)
FF: Firefox,N: Netscape,IE: Internet Explorer；数字表示此版本以后支持
属性 描述 FF N IE
global
RegExp 对象是否具有标志 g。1 4 4
ignoreCase
RegExp 对象是否具有标志 i。1 4 4
lastIndex
一个整数，标示开始下一次匹配的字符位置。1 4 4
multiline
RegExp 对象是否具有标志 m。1 4 4
source
正则表达式的源文本。1 4 4
方法 描述 FF N IE
exec
检索字符串中指定的值。返回找到的值（存放于数组中）。1 4 4
test
检索字符串中指定的值。返回 true 或 false。1 4 4
说明：
⒈exec() 找到了匹配的文本，则返回一个结果数组。否则，返回 null。此数组的第 0 个元素是与正则表达式相匹配的文本，第 1 个元素是与 RegExpObject 的第 1 个子表达式相匹配的文本（如果有的话），第 2 个元素是与 RegExpObject 的第 2 个子表达式相匹配的文本（如果有的话），以此类推。除了数组元素和 length 属性之外，exec() 方法还返回两个属性。index 属性声明的是匹配文本的第一个字符的位置。input 属性则存放的是被检索的字符串 string。
⒉使用过的正则对象会从上次匹配位置开始新匹配。
⒊如果构造函数中属性包含i，会把所有匹配项强制转换为小写。
⒋正则对象中不包含g的话只处理一次匹配。
简单示例：
实例化一个RegExp：
var reg = new RegExp('[a-z]+','img'); // 检测包含连续字母的字符串
var str = '12345abcde67890FGHIJK_)(*&^%$#@!';
reg.test(str); // 返回true
reg.lastIndex = 0; // 如果继续使用reg而没有重新实例化，reg会从上次的匹配项以后查找，故需要重置
matches = [];
while (match = reg.exec(str))
{
matches.push(match[0]); // match为一个数组： match[0]为本次匹配到的字符串；match[‘input’]为被匹配字符串，即str；match[‘index’]为本次匹配到的字符串的位置；match[n](n>0）为正则表达式中的第n个子式匹配内容（如果有的话）
}
alert(matches.join(',')); // abcde,fghijk 说明：FGHIJK也被匹配了是因为属性中包含 i：不区分大小写。
支持正则表达式的 String 对象的方法
方法 描述 FF N IE
search
检索与正则表达式相匹配的值，返回位置。1 4 4
match
找到一个或多个（含属性g)正在表达式的匹配，返回字符串或数组 1 4 4
replace
替换与正则表达式匹配的子串，返回替换后的字符串。1 4 4
split
把字符串分割为字符串数组，返回数组。1 4 4
说明：
⒈ replace函数的第二个参数可以是一个函数，此时会调用此函数处理每一次匹配。
⒉ replace函数的正则参数如果不包含g属性，将只替换第一个匹配。
简单示例：
将 str中的url添加上html a标签。（注意：此demo代码并不实用）
var reg = new RegExp("([ftph]+://[a-zA-Z0-9\._-]+)","mg");
str = str.replace(reg,"");
var sentence = "I am a sentence!";
var words = sentence.split(/\s+/); // words=[I,am,a,sentence!]
Javascript RegExp
定义及方法
[1]RegExp 是正则表达式的缩写。
当您检索某个文本时，可以使用一种模式来描述要检索的内容。RegExp 就是这种模式。
简单的模式可以是一个单独的字符。
更复杂的模式包括了更多的字符，并可用于解析、格式检查、替换等等。
您可以规定字符串中的检索位置，以及要检索的字符类型，等等。
RegExp 对象表示正则表达式，它是对字符串执行模式匹配的强大工具
RegExp 对象用于存储检索模式。
通过 new 关键词来定义 RegExp 对象。以下代码定义了名为 patt1 的 RegExp 对象，其模式是 "e"：
var patt1 = new RegExp("e"); 　创建RegExp对象语法：
RegExp 对象有 3 个方法：test()、exec() 以及 compile()。
test()
test() 方法检索字符串中的指定值。返回值是 true 或 false。
例子：
var patt1 = new RegExp("e"); document.write(patt1.test("The best things in life are free")); 
var patt1 = new RegExp("e"); document.write(patt1.test("The best things in life are free"));
由于该字符串中存在字母 "e"，以上代码的输出将是：
true 
true
exec()
exec() 方法检索字符串中的指定值。返回值是被找到的值。如果没有发现匹配，则返回 null。
例子 1：
var patt1 = new RegExp("e"); document.write(patt1.exec("The best things in life are free"));  
var patt1 = new RegExp("e"); document.write(patt1.exec("The best things in life are free"));
由于该字符串中存在字母 "e"，以上代码的输出将是：
e  e
例子 2：
您可以向 RegExp 对象添加第二个参数，以设定检索。例如，如果需要找到所有某个字符的所有存在，则可以使用 "g" 参数 ("global")。
如需关于如何修改搜索模式的完整信息，请访问我们的 RegExp 对象参考手册。
在使用 "g" 参数时，exec() 的工作原理如下：
找到第一个 "e"，并存储其位置
如果再次运行 exec()，则从存储的位置开始检索，并找到下一个 "e"，并存储其位置
var patt1 = new RegExp("e", "g"); do { result = patt1.exec("The best things in life are free"); document.write(result); } while ( result != null )  
var patt1 = new RegExp("e", "g"); do { result = patt1.exec("The best things in life are free"); document.write(result); } while ( result != null )
由于这个字符串中 6 个 "e" 字母，代码的输出将是：
eeeeeenull  
eeeeeenull
compile()
compile() 方法用于改变 RegExp。
compile() 既可以改变检索模式，也可以添加或删除第二个参数。
例子：var patt1 = new RegExp("e"); document.write(patt1.test("The best things in life are free")); patt1.compile("d"); document.write(patt1.test("The best things in life are free"));  
var patt1 = new RegExp("e"); document.write(patt1.test ("The best things in life are free")); patt1.compile("d"); document.write(patt1.test("The best things in life are free"));
由于字符串中存在 "e"，而没有 "d"，以上代码的输出是：
truefalse
new RegExp(pattern,attributes);
参数：
参数 pattern 是一个字符串，指定了正则表达式的模式或其他正则表达式。
参数 attributes 是一个可选的字符串，包含属性 "g"、"i" 和 "m"，分别用于指定全局匹配、区分大小写的匹配和多行匹配。ECMAScript 标准化之前，不支持 m 属性。如果 pattern 是正则表达式，而不是字符串，则必须省略该参数。
返回值：
一个新的 RegExp 对象，具有指定的模式和标志。如果参数 pattern 是正则表达式而不是字符串，那么 RegExp() 构造函数将用与指定的 RegExp 相同的模式和标志创建一个新的 RegExp 对象。
如果不用 new 运算符，而将 RegExp() 作为函数调用，那么它的行为与用 new 运算符调用时一样，只是当 pattern 是正则表达式时，它只返回 pattern，而不再创建一个新的 RegExp 对象。
抛出：
SyntaxError - 如果 pattern 不是合法的正则表达式，或 attributes 含有 "g"、"i" 和 "m" 之外的字符，抛出该异常。
TypeError - 如果 pattern 是 RegExp 对象，但没有省略 attributes 参数，抛出该异常。
修饰符：
修饰符描述i执行对大小写不敏感的匹配。g执行全局匹配（查找所有匹配而非在找到第一个匹配后停止）。m执行多行匹配。方括号：
方括号用于查找某个范围内的字符：
表达式描述[abc]查找方括号之间的任何字符。[^abc]查找任何不在方括号之间的字符。[0-9]查找任何从 0 至 9 的数字。[a-z]查找任何从小写 a 到小写 z 的字符。[A-Z]查找任何从大写 A 到大写 Z 的字符。[a-Z]查找任何从小写 a 到大写 Z 的字符。[adgk]查找给定集合内的任何字符。[^adgk]查找给定集合外的任何字符。[red|blue|green]查找任何指定的选项。支持正则表达式的String对象的方法：
FF: Firefox,IE: Internet Explorer
方法描述FFIEsearch检索与正则表达式相匹配的值。14match找到一个或多个正则表达式的匹配。14replace替换与正则表达式匹配的子串。14split把字符串分割为字符串数组。14