8.9 特殊字符与字符匹配符
正则表达式中使用多种方式来表示非打印字符和原义字符,这些方式都以字符“\”后跟其他转义字符序列来表示,其中的一些方式也可以表示普通字符。字符匹配符用于指定可以匹配多个字符中的任意一个。
8.9.1 特殊字符
(1)\xn 匹配ASCII码值等于n的字符。n必须是两位的十六进制整数。例如,“\x41”匹配字符“A”。用这种方式可以表示所有非打印字符。
(2)\n 此处的n是一个一位的八进制数(0~7)。如果\n前面至少有n个捕获子匹配,那么\n是反向引用,否则,匹配ASCII码值等于n的字符。
(3)\nm此处的m和n都是一个一位的八进制数(0~7)。如果\nm前面至少有nm个捕获子表达式,那么nm是反向引用。如果\nm前面至少有n个捕获,那么\n是反向引用, m是字面意义上的数字字符。如果前面的条件皆不存在,\nm匹配ASCII码值等于八进制的nm的字符。
(4)\nml 当n是八进制数(0~3),m和l是八进制数(0~7)时,匹配ASCII码值等于八进制的nml的字符。
(5)\un 匹配Unicode编码等于n的字符。此处的n必须是一个4位的十六进制整数。例如,\u00A9匹配版权符号(©)。
(6)\cx 匹配由x指定的控制字符。例如,\cM匹配Ctrl+M表示的控制字符,即回车符。X的值必须在A~Z或a~z之间,否则,c就是字面意义的字符“c”。
|
|
“\x041”的意义是“\x04”所表示的字符后跟字符“1”。 |
8.9.2 字符匹配符
(1)[…] 匹配方括号中包含的字符集中的任意一个字符。例如,“[abc]”可以与“a”、“b”、“c”3个字符中的任何一个匹配。如果字符集中要包含“]”字符,需将其放在第一位,即紧跟在“[”后面。[…]中的字符“\”仍作为转义字符,若要在[…]中包含“\”字符本身,需使用“\\”。
(2)[^…] 匹配方括号中未包含的任意字符。例如,“[^abc]”可匹配“a”、“b”、“c”3个字符之外的任何字符。只要字符“^”不是出现在第一个“[”后面,就还是字面意义上的“^”。
(3)[a-z] 匹配指定范围内的任何字符。例如,“[1-9]”匹配1到9之间的任何数字字符。若要在方括号中包含字面意义的连字符“-”,可以用“\”将其标记为原义字符,例如[a\-z]。也可以将“-”放在方括号的开始或结尾处,例如,[-a-z]或[a-z-]匹配所有小写字母和连字符。
(4)[^a-z] 匹配不在指定范围内的任何字符。例如,“[^a-z]”匹配不在a~z之间的任何字符。
代码8.9演示了字符匹配的使用。
代码8.9 字符匹配:8.9.htm
<html><head><title>字符匹配</title>
</head>
<body>
<script language="JavaScript">
<!--
var textString=prompt("请输入一个字符串:","");
var reg_expression = /[A-Z][a-z]tion/;
var result=reg_expression.test(textString);
document.write("<font size='+1'><b>检查结果为:"+result+"<br>");
if(result){
document.write("<b>在“"+textString+"”中找到了正则表达/[A-Z][a-z]tion/的匹配。<br>");
}
else{
document.write("未找到匹配!");
}
// -->
</script>
</body>
</html>
运行该段代码,会弹出一个对话框,要求用户输入一个字符串。如果输入Action(如图8.9所示),并单击“确定”按钮,在浏览器窗口中会显示匹配成功的相关内容,如图8.10所示。

图8.9 输入字符串Action

图8.10 显示匹配成功
(5)\d 匹配任意一个数字字符,等效于[0-9]。
(6)\D 匹配任意一个非数字字符,等效于[^0-9],是\d的逆运算。
(7)\s 匹配任意空白字符,包括空格、制表符、换页符等,等效于[\f\n\r\t\v]。
(8)\S 匹配任意非空白字符,是\s的逆运算,等效于[^\f\n\r\t\v]。
(9)\w 匹配任何英文字母和数字类字符以及下划线。等效于[A-Za-z0-9_]。
(10)\W匹配任何非英文字母和数字类字符,但不包括下划线。是\w的逆运算。等效于[^A-Za-z0-9_]。
(11). 匹配除“\n”之外的任何单个字符。
例如,“(.)\l”匹配除“\n”之外的两个连续的相同字符。若要匹配包括“\n”在内的任意字符,可以使用“[\s\S]”、“[\d\D]”或“[\w\W]”等模式。若要匹配“.”字符本身,需要使用“\.”。代码8.10是该匹配的应用举例。
代码8.10 圆点(.)元字符:8.10.htm
<html><head><title>圆点(.)元字符 </title>
</head>
<body>
<h1>圆点(.)元字符</h1>
<script language="JavaScript">
<!--
var textString="q adfqw asd将23qw行dfas。sd22凯";
var reg_expression = /将....行/;
var result=reg_expression.test(textString);
document.write("<font size='+1'><b>检查结果为:"+result+"<br>");
if(result){
document.write("<b>在“"+textString +"”中找到了正则表达式/将....行/的匹配。<br>");
}
else{
document.write("未找到匹配!");
}
// -->
</script>
</body>
</html>
代码运行后的显示结果如图8.11所示。

图8.11 显示结果







