有時看見 javascript 寫 RegExp 的 Pattern(規則運算式模式) 時,例如
var reg=/hello/i;
能看到要比對的是 hello 字串,但最後面的那個 i 是什麼?
一開始還真的不知道要下什麼關鍵字去尋找,原本我是從別的語言學到 Regular Expression,
看到 JavaScript RegExp Reference 後,最後面這個 i 字元是一種 modifiers,
i : 的意思是不區分大小寫的比對,例如有段程式為
var reg= /hello/i;
var text = "Hello World!";
var m = text.match(reg);
console.log(m[0]);
輸出結果為
Hello
我們定義的 pattern 是小寫的 hello,卻能比對出大寫 H 的 Hello 字串,這就是 i modifiers 的用意。
*動手試試看:嘗試將 i 拿掉後,會發生什麼事
除了 i 以外,在 javascript 的 RegExp modifiers 還有 g 跟 m,
g : 表示會可比對多個成功的結果,預設沒有 g 時,就是比對到一個就停止
var reg= /hello/g;
var text = "hello world! hello~";
var m = text.match(reg);
console.log(m.length]);
輸出結果為
2
表示有兩個比對成功的數量長度結果。
*動手試試看:嘗試將 g 拿掉後,查看比對成功的數量長度為何
另一個就是 m modifiers,
m : 意思是變成每一行文字都有字首與字尾,變成可能每一行文字都是一組字首字尾,
原本沒有定義 m 時,則為所有文字的開頭為字首,與最後一個字為字尾,這樣只有一組字首字尾。
var reg= /t$/gm;
var text = "what\r\nis\r\nit";
var m = text.match(reg);
var l = m.length
\r\n 意思是換行,等於按一下 Enter 的意思,
所以實際上我們有一段文字為
what
is
it
先使用 g modifiers,可以比對好幾個結果,才看得出來 m modifiers效果,
所以後面使用 gm (也能寫成 mg,順序上無差別),
$ 擺在 pattern 文字最後的意思,最後面比對的文字一定要符合 t,
結果會顯示為
2
有兩筆比對成功,原因是 m 將這個 what\r\nis\r\nit 拆成三行來比對字首字尾,
其中 $ 就是要比對字尾,所以 what 跟 it 的 t 就被比對成功。
*動手試試看:嘗試將 m 拿掉,察看結果為如何
新手發文,若有誤的話,請回報,感謝。