
RegExp
RegExp是一个VBScript5.0的正则表达式对象。
基本介绍
- 中文名:RegExp
- 外文名:RegExp VBScript
- 建立变数: Dim regEx,Matches
- 正则表达式: Set regEx = New RegExp
- 执行搜寻:Matches = regEx.test(strng)
正则表达式
某人一天写程式的时候出现了一个问题,总是出现不允许操作的对象的错误,很奇怪之前一直运行没有问题的程式,怎幺会有不允许操作的对象呢?只能一步一步的查到底是那个对象不允许操作了,终于找到了这个对象,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 = matchesEnd 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对象的用法:
RegExp 对象的属性
◎ Global属性
Global属性设定或返回一个 Boolean 值,该值指明在整个搜寻字元串时模式是全部匹配还是只匹配第一个。
语法
object.Global [= True | False ]
object 参数总是 RegExp 对象。如果搜寻套用于整个字元串,Global 属性的值为 True,否则其值为 False。默认的设定为 True。
Global 属性的用法(改变赋予 Global 属性的值并观察其效果):
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 = RetStrEnd FunctionMsgBox 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 FunctionMsgBox 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 FunctionMsgBox 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 FunctionMsgBox 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 的副本。
Replace 方法的用法:
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 FunctionMsgBox 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 IfEnd FunctionMsgBox 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); // 返回truereg.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!]
定义及方法
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
方法 | 描述 | FF | IE |
search | 检索与正则表达式相匹配的值。 | 1 | 4 |
match | 找到一个或多个正则表达式的匹配。 | 1 | 4 |
replace | 替换与正则表达式匹配的子串。 | 1 | 4 |
split | 把字元串分割为字元串数组。 | 1 | 4 |