8.10 定位符与原义字符
在验证时,要用到一些定位符,来限定字符出现的位置,以方便匹配。同时,对于表达式中的元字符,必须进行转义,使其变成原义字符才能正常显示。本节介绍这两种应用。
8.10.1 用于文本验证的定位符
定位符用于规定匹配模式在目标字符串中的出现位置。例如,只能出现在开头或结尾处,这对文本格式的验证非常有用。在正则表达式中,有以下几个定位符。
1.用 ^ 匹配目标字符串的开始位置
匹配必须发生在目标字符串的开头处,^必须出现在表达式的最前面才具有定位符作用。例如,“^o”与“ok”中的o匹配,但与“hello”中的o不匹配。如果设置了RegExp对象实例的Multiline属性,^还会与行首匹配,即与“"n”、“"r”之后的位置匹配。代码8.11演示了该字符的使用。
代码8.11 行首匹配字符^:8.11.htm
<html>
<head><title>行首匹配字符^</title></head>
<body>
<h1>行首匹配字符^</h1>
<script language="JavaScript">
<!--
var reg_expression = /^zt/; //使用行首元字符
var textString=prompt("请输入要检查的字符串:","");
var result=reg_expression.test(textString); //匹配时返回true,否则false
document.write("<font size='+1'><b>"+result+"<br>");
if(result){
document.write("<b>正则表达式/^zt/匹配字符串"""+ textString +""".<br>");
}
else{
alert("未找到匹配!");
}
// -->
</script>
</body>
</html>
运行该段代码,会弹出一个对话框,要求用户输入一个字符串。如果输入zt129837op2ueop(如图8.12所示),并单击“确定”按钮,在浏览器窗口中会显示匹配成功的相关内容,如图8.13所示。
图8.12 输入字符串zt129837op2ueop 图8.13 显示匹配成功
2.用 $ 匹配目标字符串的结尾位置
匹配必须发生在目标字符串的结尾处,$必须出现在表达式的最后面才具有定位符作用。例如,“o$”与“hello”中的o匹配,但与“ok”中的o不匹配。如果设置了RegExp对象实例的mutiline属性,$还会与行尾匹配,即与“"n”、“"r”之前的位置匹配。代码8.12演示了该字符的使用。
代码8.12 行尾匹配字符$:8.12.htm
<html>
<head>
<title>行尾匹配字符$</title>
</head>
<body>
<h1>行尾匹配字符$</h1>
<script language="JavaScript">
<!--
var reg_expression = /zt$/;
var textString=prompt("请输入要检查的字符串:","");
var result=reg_expression.test(textString); //匹配时返回true,否则false
document.write("<font size='+1'><b>"+result+"<br>");
if(result){
document.write("<b>正则表达式/zt$/匹配字符串"""+ textString +""".<br>");
}
else{
alert("未找到匹配!");
}
// -->
</script>
</body>
</html>
运行该段代码,会弹出一个对话框,要求用户输入一个字符串。如果输入qweriqupoiasdzt(如图8.14所示),并单击“确定”按钮,在浏览器窗口中会显示匹配成功的相关内容,如图8.15所示。
图8.14 输入字符串qweriqupoiasdzt 图8.15 显示匹配成功
3.用 "b 匹配一个字边界
"b包含了字与空格间的位置,以及目标字符串的开始和结束位置等。例如,“er"b”匹配“never ok”中的“er”,但不匹配“verb”中的“er”。代码8.13演示了该字符的使用。
代码8.13 行尾匹配字符$:8.13.htm
<html><head><title>使用元字符"b</title>
</head>
<body>
<h1>使用元字符"b</h1>
<script language="JavaScript">
<!--
var reg_expression = /"bman"b/;
var textString=prompt("请输入要检查的字符串:","");
var result=reg_expression.test(textString); //匹配时返回true,否则false
document.write("<font size='+1'><b>"+result+"<br>");
if(result){
document.write("<b>正则表达式 /""bman""b/匹配字符串"""+ textString +""".<br>");
}
else{
alert("未找到匹配!");
}
// -->
</script>
</body>
</html>
运行该段代码,会弹出一个对话框,要求用户输入一个字符串。如果输入“man woman”(如图8.16所示),并单击“确定”按钮,在浏览器窗口中会显示匹配成功的相关内容,如图8.17所示。
图8.16 输入字符串“man woman” 图8.17 显示匹配成功
4.用 "B 匹配非字边界
例如,“er"B”匹配“verb”中的“er”,但不匹配“never”中的“er”。
8.10.2 对特殊字符进行转义
在表达式中用到的一些元字符不再表示原来的字面意义,如果要匹配这些有特殊意义的元字符,必须使用“"”将这些字符转义为原义字符。需要进行转义的字符有“$”、“(”、“)”、“*”、“+”、“.”、“[”、“]”、“?”、“"”、“/”、“^”、“{”、“}”、“|”。
“"”的作用是将下一字符标记为特殊字符、原义字符、反向引用或八进制转义符,所以,要匹配字面意义的“"”,需要使用“""”表示。
创建RegExp对象实例的一种方式是将表达式嵌套在一对“/”中,所以,在表达式模式中,要表示字面意义的“/”也要用“"/”进行转义。