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對象實例的一種方式是將表達式嵌套在一對“/”中,所以,在表達式模式中,要表示字面意義的“/”也要用“"/”進行轉義。