[Regular Expression][modifiers] 最後面的 i, g, m 意思

  • 7908
  • 0
  • 2016-11-18

有時看見 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 拿掉,察看結果為如何


 

新手發文,若有誤的話,請回報,感謝。