文章目錄
- 8.10 定位器與原義字元
- 8.10.1 用於文本驗證的定位器
8.10 定位器與原義字元
在驗證時,要用到一些定位器,來限定字元出現的位置,以方便匹配。同時,對於運算式中的元字元,必須進行轉義,使其變成原義字元才能正常顯示。本節介紹這兩種應用。
8.10.1 用於文本驗證的定位器
定位器用於規定匹配模式在目標字串中的出現位置。例如,只能出現在開頭或結尾處,這對文字格式設定的驗證非常有用。在Regex中,有以下幾個定位器。
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>Regex/^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>Regex/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>Regex /""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對象執行個體的一種方式是將運算式嵌套在一對“/”中,所以,在運算式模式中,要表示字面意義的“/”也要用“"/”進行轉義。