JavaScript--正则表达式
点的转义:. ==> u002E
正则表达式(regular expression)对象包含一个正则表达式模式(pattern)。它具有用正则表达式模式去匹配或代替一个串(string)中特定字符(或字符集合)的属性(properties)和方法(methods)。
正则表达式构造函数: new RegExp("pattern"[,"flags"]);
参数说明:
pattern -- 一个正则表达式文本
flags -- 如果存在,将是以下值:
g: 全局匹配
i: 忽略大小写
gi: 以上组合
在构造函数中,一些特殊字符需要进行转意(在特殊字符前加"/")。正则表达式中的特殊字符:
/ 转意,即通常在"/"后面的字符不按原来意义解释,如/b/匹配字符"b",当b前面加了反斜杆后//b/,转意为匹配一个单词的边界。
-或-
对正则表达式功能字符的还原,如"*"匹配它前面元字符0次或多次,/a*/将匹配a,aa,aaa,加了"/"后,/a/*/ 将只匹配"a*"。 ^ 匹配一个输入或一行的开头,/^a/匹配"an A",而不匹配"An a"
$ 匹配一个输入或一行的结尾,/a$/匹配"An a",而不匹配"an A"
* 匹配前面元字符0次或多次,/ba*/将匹配b,ba,baa,baaa
+ 匹配前面元字符1次或多次,/ba*/将匹配ba,baa,baaa
? 匹配前面元字符0次或1次,/ba*/将匹配b,ba
(x) 匹配x保存x在名为$1...$9的变量中
x|y 匹配x或y
{n} 精确匹配n次
{n,} 匹配n次以上
{n,m} 匹配n-m次
[xyz] 字符集(character set),匹配这个集合中的任一一个字符(或元字符)
[^xyz] 不匹配这个集合中的任何一个字符
[/b] 匹配一个退格符
/b 匹配一个单词的边界
/B 匹配一个单词的非边界
/cX 这儿,X是一个控制符,//cM/匹配Ctrl-M
/d 匹配一个字数字符,//d/ = /[0-9]/
/D 匹配一个非字数字符,//D/ = /[^0-9]/
/n 匹配一个换行符
/r 匹配一个回车符
/s 匹配一个空白字符,包括/n,/r,/f,/t,/v等
/S 匹配一个非空白字符,等于/[^/n/f/r/t/v]/
/t 匹配一个制表符
/v 匹配一个重直制表符
/w 匹配一个可以组成单词的字符(alphanumeric,这是我的意译,含数字),包括下划线,如[/w]匹配"$5.98"中的5,等于[a-zA-Z0-9]
/W 匹配一个不可以组成单词的字符,如[/W]匹配"$5.98 ......
美元符号的转义:$ ==> u0024
乘方符号的转义:^ ==> u005E
左大括号的转义:{ ==> u007B
左方括号的转义:[ ==> u005B
左圆括号的转义:( ==> u0028
竖线的转义:| ==> u007C
右圆括号的转义:) ==> u0029
星号的转义:* ==> u002A
加号的转义:+ ==> u002B
问号的转义:? ==> u003F
反斜杠的转义: ==> u005C
正则表达式(regular expression)对象包含一个正则表达式模式(pattern)。它具有用正则表达式模式去匹配或代替一个串(string)中特定字符(或字符集合)的属性(properties)和方法(methods)。
正则表达式构造函数: new RegExp("pattern"[,"flags"]);
参数说明:
pattern -- 一个正则表达式文本
flags -- 如果存在,将是以下值:
g: 全局匹配
i: 忽略大小写
gi: 以上组合
在构造函数中,一些特殊字符需要进行转意(在特殊字符前加"/")。正则表达式中的特殊字符:
/ 转意,即通常在"/"后面的字符不按原来意义解释,如/b/匹配字符"b",当b前面加了反斜杆后//b/,转意为匹配一个单词的边界。
-或-
对正则表达式功能字符的还原,如"*"匹配它前面元字符0次或多次,/a*/将匹配a,aa,aaa,加了"/"后,/a/*/ 将只匹配"a*"。 ^ 匹配一个输入或一行的开头,/^a/匹配"an A",而不匹配"An a"
$ 匹配一个输入或一行的结尾,/a$/匹配"An a",而不匹配"an A"
* 匹配前面元字符0次或多次,/ba*/将匹配b,ba,baa,baaa
+ 匹配前面元字符1次或多次,/ba*/将匹配ba,baa,baaa
? 匹配前面元字符0次或1次,/ba*/将匹配b,ba
(x) 匹配x保存x在名为$1...$9的变量中
x|y 匹配x或y
{n} 精确匹配n次
{n,} 匹配n次以上
{n,m} 匹配n-m次
[xyz] 字符集(character set),匹配这个集合中的任一一个字符(或元字符)
[^xyz] 不匹配这个集合中的任何一个字符
[/b] 匹配一个退格符
/b 匹配一个单词的边界
/B 匹配一个单词的非边界
/cX 这儿,X是一个控制符,//cM/匹配Ctrl-M
/d 匹配一个字数字符,//d/ = /[0-9]/
/D 匹配一个非字数字符,//D/ = /[^0-9]/
/n 匹配一个换行符
/r 匹配一个回车符
/s 匹配一个空白字符,包括/n,/r,/f,/t,/v等
/S 匹配一个非空白字符,等于/[^/n/f/r/t/v]/
/t 匹配一个制表符
/v 匹配一个重直制表符
/w 匹配一个可以组成单词的字符(alphanumeric,这是我的意译,含数字),包括下划线,如[/w]匹配"$5.98"中的5,等于[a-zA-Z0-9]
/W 匹配一个不可以组成单词的字符,如[/W]匹配"$5.98 ......
======================
正则表达式对象和RegExp对象(Javascript)
正则表达式对象保存用于查找字符串中的字符组合时的模式。创建正则表达式对象后,或者它被传递给字符串方法,或者字符串被传递给一个正则表达式方法。有关最近进行查找的信息被保存在 RegExp 对象中。
创建正则表达式对象有两种方法。如果预先知道要查找的字符串时,用语法1:
var regularexpression = /pattern/[switch] 当查找字符串经常变动或不知道时用语法2:
var regularexpression = new RegExp("pattern",["switch"])
pattern是要查找的字符串,在语法1中用斜杠括起来,而在语法2中有引号。switch是开关,有三种选择,"i" 表示忽略大小写,"g" 表示全文查找出现的所有pattern,"gi" 表示两者都要,即全文查找并忽略大小写。
执行查找
在创建了正则表达式对象后,要执行查找用exec方法,语法:
rgexp.exec(str)
rgexp是正则表达式对象,可以是变量名或文字。str是被查找的字符串。例如,
var s = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPp";
var r = new RegExp("g", "i");
var a = r.exec(s);
document.write(a); //显示G
因为忽略大小写,执行搜索后第一个匹配的是G,所以变量a="G"。
exec方法查找的结果被放在一个数组中。如果 exec 方法没有找到匹配,则它返回 null。如果它找到一个或多个匹配,则exec 方法返回一个数组,并且更新 RegExp 对象,来反映查找结果。在RegExp 对象的属性 $1, ...$9 中保存最近的九个结果。无论何时产生一个成功的带插入语的匹配,$1...$9 属性的值都被修改,但是只有最近的九个可以被保存起来。
测试正则表达式模式
可以用test方法来测试正则表达式在被查字符串的中是否存在。语法
rgexp.test(str)
语法与exec方法一样。它返回一个Boolean值,如果存在就返回true,否则返回false。test 方法不修改RegExp对象中的信息。
RegExp对象和它的属性
RegExp对象用于保存对正则表达式模式查找的信息,这些信息保持在它的属性中。RegExp对象没有方法。一般语法是
RegExp.propertyname
propertyname 参数是RegExp对象的一个属性。RegExp对象有下列属性:
$1-$9 属性 返回九个在模式匹配期间找到的、最近保存的部分。只读。
RegExp.index 返回第一个成功匹配的字符串的开始位置。
RegExp.lastIndex 返回字符位置,它是被查找字符串中最后一次成功匹配的开始位置。
RegExp.input 返回执行查找的字符串。只读。
lastIndex 属性是基于零的,也就是说,第一个字符的索引是零。不论何时产生一个成功匹配,它的值都被修改。lastIndex 属性被RegExp 对象的exec 和test 方法,以及String 对象的match、replace、和 split 方法修改。
下面的规则应用于 lastIndex 的值:
如果还没有匹配,则 lastIndex 被设置为 -1.
如果 lastIndex 比字符串的长度大,则 test 和 exec 失败,并且 lastIndex 被设置为 -1。
如果 lastIndex 等于字符串的长度,且模式与空字符串匹配,则正则表达式匹配。否则,匹配失败并且 lastIndex 被重置为 -1。
否则,lastIndex 被设置为紧接最近的匹配的下一个位置。
例程1 下面的代码用来考察上述属性的内容。
function RegexpDemo(reg, str){
var re = new RegExp(reg ,"gi");
var a = re.exec(str);
var BR = "<br>";
if (re.test(str))
document.write ("找到的第一个匹配的字符串是" +a + BR);
document.write ("第一个匹配位置是" +RegExp.index+ BR);
document.write ("最后一个匹配位置是" +RegExp.lastIndex+ BR);
document.write ("被查找的文本是:" +BR +RegExp.input+ BR);
document.write ("$1=" + RegExp.$1);
};
var str = "The built-in objects are special because they are built into ASP pages and do not need to be created before you can use them in scripts.";
var reg = "(OBJECT)";
document.write ("查找" + reg + "<br>");
RegexpDemo(reg, str+str);
运行例程
说明 查找的字符串OBJECT加括号,$1有值。如果不加括号,$1是空串。什么道理? 我也不知道。
正则表达式对象的属性
正则表达式对象有两个属性属性。lastIndex属性指定索引,下一个匹配从该索引处开始。语法:
rgexp.lastIndex [= index]
请参照RegExp对象的lastIndex属性。
source属性返回正则表达式模式的文本的复本,只读。语法:
rgexp.source
下面的例子说明了source 属性的用法:
function SourceDemo(re, s)
{
var s1;
// 测试字符串中是否存在正则表达式。
if (re.test(s))
s1 = " contains ";
else
s1 = " does not contain ";
// 获得正则表达式自己的文本。
return(s + s1 + re.source);
RegExp.input 是返回被查找的字符串,而source是返回要查找的字符串。
正则表达式对象的compile方法
正则表达式模式pattern 参数在使用前被编译为内部格式。对语法1 来说,pattern 在该脚本装载时被编译。对语法2 来说,pattern 在使用前,或调用compile方法时被编译。compile方法把pattern转换为内部格式,从而执行得更快。这使得在循环中可更有效地使用正则表达式。语法如下:
rgexp.compile(pattern)
下面的例子说明了compile 方法的用法:
function CompileDemo()
{
var s = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPp"
// 只为大写字母创建正则表达式。
var r = new RegExp("[A-Z]", "g");
var a = s.match(r) // 查找匹配。
document.write(a);
r.compile("[a-z]", "g");// 只为小写字母编译正则表达式。
var a = s.match(r) // 查找匹配。
document.write(a);
}
代码注释
match是String对象的一个方法,其功能是使用正则表达式对象对字符串进行查找,并将结果作为数组返回。语法:
stringObj.match(rgExp) match 方法与RegExp.exec 方法有些相似,将返回一个数组。该数组的元素0 包含最后匹配的字符,元素 1...n 包含与正则表达式中任何用插入符分开的子字符串匹配的内容。该方法将更新RegExp 对象的内容。
下面的示例演示了match方法的用法:
function MatchDemo()
{
var r, re;
var s = "The quick brown fox jumped over the lazy yellow dog.";
re = /fox/i;
r = s.match(re);
return(r);
}
正则表达式对象保存用于查找字符串中的字符组合时的模式。创建正则表达式对象后,或者它被传递给字符串方法,或者字符串被传递给一个正则表达式方法。有关最近进行查找的信息被保存在 RegExp 对象中。
创建正则表达式对象有两种方法。如果预先知道要查找的字符串时,用语法1:
var regularexpression = /pattern/[switch] 当查找字符串经常变动或不知道时用语法2:
var regularexpression = new RegExp("pattern",["switch"])
pattern是要查找的字符串,在语法1中用斜杠括起来,而在语法2中有引号。switch是开关,有三种选择,"i" 表示忽略大小写,"g" 表示全文查找出现的所有pattern,"gi" 表示两者都要,即全文查找并忽略大小写。
执行查找
在创建了正则表达式对象后,要执行查找用exec方法,语法:
rgexp.exec(str)
rgexp是正则表达式对象,可以是变量名或文字。str是被查找的字符串。例如,
var s = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPp";
var r = new RegExp("g", "i");
var a = r.exec(s);
document.write(a); //显示G
因为忽略大小写,执行搜索后第一个匹配的是G,所以变量a="G"。
exec方法查找的结果被放在一个数组中。如果 exec 方法没有找到匹配,则它返回 null。如果它找到一个或多个匹配,则exec 方法返回一个数组,并且更新 RegExp 对象,来反映查找结果。在RegExp 对象的属性 $1, ...$9 中保存最近的九个结果。无论何时产生一个成功的带插入语的匹配,$1...$9 属性的值都被修改,但是只有最近的九个可以被保存起来。
测试正则表达式模式
可以用test方法来测试正则表达式在被查字符串的中是否存在。语法
rgexp.test(str)
语法与exec方法一样。它返回一个Boolean值,如果存在就返回true,否则返回false。test 方法不修改RegExp对象中的信息。
RegExp对象和它的属性
RegExp对象用于保存对正则表达式模式查找的信息,这些信息保持在它的属性中。RegExp对象没有方法。一般语法是
RegExp.propertyname
propertyname 参数是RegExp对象的一个属性。RegExp对象有下列属性:
$1-$9 属性 返回九个在模式匹配期间找到的、最近保存的部分。只读。
RegExp.index 返回第一个成功匹配的字符串的开始位置。
RegExp.lastIndex 返回字符位置,它是被查找字符串中最后一次成功匹配的开始位置。
RegExp.input 返回执行查找的字符串。只读。
lastIndex 属性是基于零的,也就是说,第一个字符的索引是零。不论何时产生一个成功匹配,它的值都被修改。lastIndex 属性被RegExp 对象的exec 和test 方法,以及String 对象的match、replace、和 split 方法修改。
下面的规则应用于 lastIndex 的值:
如果还没有匹配,则 lastIndex 被设置为 -1.
如果 lastIndex 比字符串的长度大,则 test 和 exec 失败,并且 lastIndex 被设置为 -1。
如果 lastIndex 等于字符串的长度,且模式与空字符串匹配,则正则表达式匹配。否则,匹配失败并且 lastIndex 被重置为 -1。
否则,lastIndex 被设置为紧接最近的匹配的下一个位置。
例程1 下面的代码用来考察上述属性的内容。
function RegexpDemo(reg, str){
var re = new RegExp(reg ,"gi");
var a = re.exec(str);
var BR = "<br>";
if (re.test(str))
document.write ("找到的第一个匹配的字符串是" +a + BR);
document.write ("第一个匹配位置是" +RegExp.index+ BR);
document.write ("最后一个匹配位置是" +RegExp.lastIndex+ BR);
document.write ("被查找的文本是:" +BR +RegExp.input+ BR);
document.write ("$1=" + RegExp.$1);
};
var str = "The built-in objects are special because they are built into ASP pages and do not need to be created before you can use them in scripts.";
var reg = "(OBJECT)";
document.write ("查找" + reg + "<br>");
RegexpDemo(reg, str+str);
运行例程
说明 查找的字符串OBJECT加括号,$1有值。如果不加括号,$1是空串。什么道理? 我也不知道。
正则表达式对象的属性
正则表达式对象有两个属性属性。lastIndex属性指定索引,下一个匹配从该索引处开始。语法:
rgexp.lastIndex [= index]
请参照RegExp对象的lastIndex属性。
source属性返回正则表达式模式的文本的复本,只读。语法:
rgexp.source
下面的例子说明了source 属性的用法:
function SourceDemo(re, s)
{
var s1;
// 测试字符串中是否存在正则表达式。
if (re.test(s))
s1 = " contains ";
else
s1 = " does not contain ";
// 获得正则表达式自己的文本。
return(s + s1 + re.source);
RegExp.input 是返回被查找的字符串,而source是返回要查找的字符串。
正则表达式对象的compile方法
正则表达式模式pattern 参数在使用前被编译为内部格式。对语法1 来说,pattern 在该脚本装载时被编译。对语法2 来说,pattern 在使用前,或调用compile方法时被编译。compile方法把pattern转换为内部格式,从而执行得更快。这使得在循环中可更有效地使用正则表达式。语法如下:
rgexp.compile(pattern)
下面的例子说明了compile 方法的用法:
function CompileDemo()
{
var s = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPp"
// 只为大写字母创建正则表达式。
var r = new RegExp("[A-Z]", "g");
var a = s.match(r) // 查找匹配。
document.write(a);
r.compile("[a-z]", "g");// 只为小写字母编译正则表达式。
var a = s.match(r) // 查找匹配。
document.write(a);
}
代码注释
match是String对象的一个方法,其功能是使用正则表达式对象对字符串进行查找,并将结果作为数组返回。语法:
stringObj.match(rgExp) match 方法与RegExp.exec 方法有些相似,将返回一个数组。该数组的元素0 包含最后匹配的字符,元素 1...n 包含与正则表达式中任何用插入符分开的子字符串匹配的内容。该方法将更新RegExp 对象的内容。
下面的示例演示了match方法的用法:
function MatchDemo()
{
var r, re;
var s = "The quick brown fox jumped over the lazy yellow dog.";
re = /fox/i;
r = s.match(re);
return(r);
}