1. Regular expression 的用途
Regular expression 是 JavaScript 中的一種文字方程式, 利用一些代號來代表某些文字組合, 例如 \d 代表數目字元, \D 代表非數目字元, \w 代表一個英文字, \s 代表空格, 等等, 我們利用這些代號組合, 就可在一個字串 (string) 中找到是否有符合 (match) 我們指定的某個字元組合 (這些字元組合是為 pattern)。
Regular expression 是在 Netscape-4 新增的功能, 使用 Perl 語言的習慣, Perl 是Internet 中普遍使用的程式語言, 強項是在文字處理方面, 所以 regular expression 最適用於 form 內有關文字及數字的 validation, 一些複習檢查, 使用 regular expression 就可簡易造到, 若使用 JavaScript 的 charAt( ) 或 charCodeAt( ) 等來檢查, 未必能做到, 就算做到, 程式會很長及很複雜, 若有大量檢查就會使到網頁很長, 浪費傳送時間。
Regular expression一般是與 String object 的 match( )、search( ) 及 replace( ) 合用, 請先看以下例子。
2. Regular expression 的設定
設定一個 regular expression 有以下兩個語法,
/pattern/flag
或 new RegExp("pattern", "flag")
我們一般會用 re (自訂的變數名稱) 來代表一個 regular expression, 所以會有以下的 statements:
re=/pattern/flag
或 re=new RegExp("pattern", "flag")
這處的 pattern 是指文字方程式, flag 可以是 g、i 或 gi , 隨後會有解釋。例如pattern 是要檢查一句文字中是否有 apple 或 orange 兩個字, 不理會大小寫, 有以下語法:
re=/apple|orange/gi
這處要留意, 除非真的要找一個空格, 否則不要在 regular expression 內加上空格, 請看以下例子:
re=/on/ | 這是找 on 兩個字母, 包括 on、don't、pond 等等。 |
re=/ on/ | 這是找前面有空格的 on, 即是三個字符, 包括 on、once、only等等, 不包括 don't、pond 等等。 |
第12章 String object(
3. match(re) 的使用
match( ) 是 String 的一個 method, 與 re 合用, 有這語法:
x = str.match(re)
這 str 代表我們設定或在文字框輸入的字串, re 是一個 regular expression, 這語法是要在 str 這字串中尋找是否符合 re 的文字, 若有的就傳回這文字及以 x 這變數來代表, 若無就傳回 null 字。
使用 global match:
1. 留意今次例子的 re=/apple|orange/gi , 這句之後有 g 的操作指示, g代表 global match, 即是尋找全部文字, 符合的會全部列出, 顯示時用 , 來分隔, 若不作這指定, 找到第一個字後就不再找下去。
2. 若在上述例子作這設定: re/apple|orange/i , 找到 apple 這字後, 就不再找下去, 所以對話盒中只會顯示 apple 一個字。
例如在文字框輸入以下一句:
No money, no home, but NOT desperate and nothing to worry.
若使用 re=/no/i 會傳回一個 No 字 (第一個找到的字)。
若使用 re=/no/gi 會傳回 No,no,NO,no 四個字 (全部找到的字)。
留意句子後方的 NOT 及 nothing 兩個字, 我們要找的是 no 這兩個字母, 這也包括一個字內的字母。若是指定不要字內的字母, 就要用 /\bno\b/gi , \b 代表字與字間的分隔, 所以會傳回 No,no 這結果。
使用 ignore case:
前段例子的 re=/no/gi , 這句之後有 i 的操作指示, i 代表 ignore case, 即是不理會文字的大小寫, 以這句為例:
No money, no home, but NOT desperate and nothing to worry.
若使用 re=/no/g 會傳回 no,no 兩個字。
若使用 re=/No/g 會傳回 No。
若使用 re=/NO/g 會傳回 NO。
若使用 re=/no/gi 會傳回 No,no,NO,no。
若不加上 i 的指示, 尋找的字會分大小寫, 若指定找 no, 就不包括 No 或 NO。
Regular expression 的代號:
Regular expression 有以下二十多個代號:
\ | 代表隨後的字元是代號, 例如 /d/ 符合 d 字元, /\d/ 符合任何數目字。 |
^ | 代表一句的開頭, 例如 /^x/ 符合 xyz 的 x, 但不符合 wxyz 的 x。 |
$ | 代表一句的尾, 例如 /c$/ 符合 abc 的 c, 但不符合 abcd 的 c。 |
* | 代表前方的字元出現 0 或多次, 例如 /abc*/ 符合 ab, abc, abcc, abccc 等等。 |
+ | 代表前方的字元出現 1 或多次, 例如 /abc*/ 符合 abc, abcc, abccc 。 |
? | 代表前方的字元出現 0 或 1 次, 例如 /abc*/ 符合 ab 或 abc。 |
. | 代表任何一個字元, 例如 /.r/ 符合 ar, br, cr 等等。 |
(a) | 代表 a 及記下這元字, 例如 /(blue)/ 符合 blue color 內的 blue 字, 並記下這blue 字, 請看隨後 $1...$9 的一段中的解釋。 |
x|y | 代表 x 或 y , 例如 /blue|red/ 符合 blue car 的 blue 及 red car 的 red。 |
{n} | n 是個正數, 代表前個位置的字元出現的次數, 例如 /x{3}/ 是代表 3 個 x 字。 |
{n,} | n 是個正數, 代表前個位置的字元出現最少的次數, 例如 /x{3,}/ 是代表 3 個或以上的 x 字。 |
{n,m} | n 及 m 是正數, 代表前個位置的字元出現最少 n 次, 最多 m 次數, 例如 /x{3,8}/ 是代表 3 至 8 個的 x 字。 |
[xyz] | 這是一組字元, 內裡任何一個字元皆合, 例如 /[pqr]/ 是符合 p、q 或 r, 但不符合 s 及 t。用 hyphen可指定一個範圍, 例如 /[0-9]/ 是代表任何數目字, /[a-e]/ 是代表 a 至 e 的字元。 |
[^xyz] | 這是一組相反字元, 內裡任何一個字元皆不合, 例如 /[^abc]/ 是符合任何字元除了 a、b 及 c, /[^a-z]/ 是不符合任何英文字母。 |
[\b] | 代表 backspace (退格鍵)。 |
\b | 代表分隔兩字間的字元 (word boundary), 例如空格及 = ( / 等符號, 例如 /\bg/ 符合 .g =g %g ,g (g 等等, 也符合 so good 的 g 字或一句之首的 g 字, 但不符合 begin 或 again 的 g 字。 |
\B | 代表非分隔字元, 即是代表字母或數字, 例如 /\Bst\/ 可代表 1st 或 paste 的 st, 但不代表 street 的 st。 |
\cX | X 代表任何控制字元 (control character), 例如 /\cM/ 代表 control-M, 即是回位字元 (carriage return)。 |
\d | 代表任何數目字, 即是 0-9, 例如 /\d\d/ 代表兩個數目字。 |
\D | 代表任何非數目字, 即是英文字母及標點符號。 |
\f | 代表 form-feed (即是分頁)。 |
\n | 代表 line-feed (即是分行)。 |
\r | 代表 carriage return (即是回位)。 |
\s | 代表任何空位, 包括 space(空格)、tab(跳格)、form feed (分頁) 及 line feed (分行), 即是空格及 [\f\n\r\t\v] 例如 /o\s\w*/ 代表 too good 的 o good。 |
\S | 代表任何非空位字元, 即不是 \s。 |
\t | 代表 tab (跳格字元)。 |
\v | 代表 vertical tab (即是 ctrl-K)。(在一般文書處理器, line feed 是分行及分段, vertical tab 是分行, 但不分段。) |
\w | 代表字母、數目字及 underscore, 即是 a-z、A-Z、0-9及 _ , 但不包括標點符號及其他特別字符, 例如不包括 ! @ # 等等。 |
\W | 代表非 \w 的字元, 即是不包括 a-z、A-Z、0-9及 _ 的字元, 例如 /\W/ 符合 #123 或 $30 的 # 或 $。 |
\xhex | 這是用 ASCII 碼來表示一個字元, 使用的是十六進位 (hex) 數字, 例如 /\x5b/ 符合 [OK] 中的 [ 。 |
Buildin Character Class
表示法 意義
\d 等於 [0-9]
\D 等於 [^0-9]
\w 等於 [A-Za-z]
\W 等於 [^A-Za-z]
\s 等於 [ \r\t\n\f]
\S 等於 [^ \r\t\n\f]
2 則留言:
很有參考價值..加入最愛了。
謝謝整理喔!
這也是從網路上來的資料, 歡迎大家使用.
張貼留言