关于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。
例子:
?
1
2 |
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:
?
1
2 |
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",并存储其位置
?
1
2 |
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() 既可以改变检索模式,也可以添加或删除第二个参数。
例子
1
2 |
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 |
=====================================================================
代码:
自:http://www.jb51.net/article/26503.htm
复制代码 代码如下:
Dim re
Set re = new RegExp '创建RegExp实例
re.Pattern = "ab+c" '定义正则表达式文字,你可以在这里替换正则表达式
Dim myString
myString = "abcefg" '定义要匹配的字符串,可以进行替换
Response.write(re.Execute(myString)(0)) '进行匹配测试,并写出结果
复制代码 代码如下:
<%
Dim re
Set re = new RegExp '创建RegExp实例
re.Pattern = "\w+" '定义正则表达式文字
Dim myString
myString = "VBScript version 5.6 provides many new features."
'进行匹配测试,并写出是否匹配成功
If re.Test(myString) Then
Response.write("匹配成功!")
Else
Response.write("匹配不成功!")
End If
%>
复制代码 代码如下:
<%
Dim re
Set re = new RegExp '创建RegExp实例
re.Pattern = "\s" '定义正则表达式文字,这里是匹配空白
Dim myString
myString = "VBScript version 5.6 provides many new features."
myString = re.replace(myString, "-") '用-替换空白,返回替换后的字符串
'写出结果
Response.write(myString)
%>
复制代码 代码如下:
<%
Dim re
Set re = new RegExp '创建RegExp实例
re.Global = True
re.Pattern = "\s" '定义正则表达式文字,这里是匹配空白
Dim myString
myString = "VBScript version 5.6 provides many new features."
myString = re.replace(myString, "-") '用-替换空白,返回替换后的字符串
'写出结果
Response.write(myString)
%>
复制代码 代码如下:
<%
Dim re
Set re = new RegExp '创建RegExp实例
re.Global = True
re.Pattern = "(\w+)-(\w+)" '定义正则表达式模式文字
Dim myString
myString = "flip-flop"
myString = re.replace(myString, "$1-$2")
'$1表示第一个\w+,$2表示第二个\w+,第一个\w+匹配flip,第二个\w+匹配flop,
'所以$1-$2相当于flip-flop
'写出结果
Response.write(myString)
%>
复制代码 代码如下:
<%
Dim re
Set re = new RegExp '创建RegExp实例
re.Global = True
re.Pattern = "(\S+)(\s+)(\S+)" '定义正则表达式模式文字
Dim myString
myString = "flip flop"
myString = re.replace(myString, "$3$2$1")
'$1表示第一个\S+,$3表示第二个\S+,$2表示\s+,
'所以$3$2$1相当于flop flip
'写出结果
Response.write(myString)
%>
复制代码 代码如下:
<%
Dim re
Set re = new RegExp '创建RegExp实例
re.Global = True
re.Pattern = "\w+" '定义正则表达式模式文字
Dim myString
myString = "VBScript version 5.6 provides many new features."
Set Matches = re.Execute(myString) '执行搜索,该集合用来保存匹配的结果
'进行匹配测试,并写出结果
'迭代Matches集合
For Each Match in Matches
'写出结果
Response.write(Match.FirstIndex & "-" & (Match.FirstIndex + Match.Length) & " " & Match.Value & "<br />")
Next
%>
复制代码 代码如下:
<%
Dim re
Set re = new RegExp '创建RegExp实例
're.Global = True 注释掉这一行
re.Pattern = "\w+" '定义正则表达式模式文字
Dim myString
myString = "VBScript version 5.6 provides many new features."
Set Matches = re.Execute(myString) '执行搜索,该集合用来保存匹配的结果
'进行匹配测试,并写出结果
'迭代Matches集合
For Each Match in Matches
'写出结果
Response.write(Match.FirstIndex & "-" & (Match.FirstIndex + Match.Length) & " " & Match.Value & "<br />")
Next
%>