RegExp物件的group元素取出方式

真的很妙……

這篇是要說明 RegExp 在 VBScript (WShell, ASP皆同) 內使用的狀況, 今天正在解決一個解析指令的語法, 想說利用 Regulare Expression 這個好物來處理一下, 結果真是令人不開心啊. 因為查了半天 msdn, 都沒有找到將 group 元素取出的方式, 所以整個就是失落(因為明明就應該是有方法可以取出來才對). 查到的文件在這裡:

http://msdn.microsoft.com/en-us/library/ms974570.aspx

想說怎麼會沒有這個語法呢? 真的是太奇怪了. 於是再到 google 另外查了一下, 發現其實還有個 SubMatches 的 collection 啦, 原來如此, 這個才是真的拿到 group 元素的方式, 想來真的是自己沒有仔細查找清楚, 只能再做個筆記自己記錄一下.

msdn 其實是有資料的, 在這裡:

http://msdn.microsoft.com/en-us/library/y27d2s18(VS.85).aspx

好地, 回到主題, 簡單地說, 今天原來要做的需求很單純, 就是將一個控制指令中的各項參數取出, 如下:

control_[series]_batch_[bno]_target_[tno]_end

這樣的一個字串, 將其中的 [series], [bno], [tno] 取出來, for example, 像是這樣的一個指令:

control_276324_batch_23_target_14_end

要將其中的 276324 及 23 及 14 取出, 若是用 parse 的方式比較麻煩, 就是一個一個比對下去, 但用 RegExp 就方便了, 既能檢查 pattern, 又可以將參數一次取出, 一舉兩得, 接下來就著手來作業了, 程式碼如下:

strCmd = "control_276324_batch_23_target_14_end"

Set objReg = New RegExp
objReg.Pattern = "control_([0-9]+)_batch_([0-9]+)_target_([0-9]+)_end"
Set objMatches = objReg.Execute(strCmd)
If objMatches.Count > 0 Then
  series = objMatches(0).SubMatches(0)
  bno = objMatches(0).SubMatches(1)
  tno = objMatches(0).SubMatches(2)
End If

Set objReg = Nothing

若是指令(strCmd)是多組, 也可以一次都處理完成, 利用 objMatches(i) 來取得, 不過就是要將 objReg.Global 設為 True 就是了.

這樣就可以一口氣將 series, bno, tno 全數取得, 一方面檢查看指令是否符合 pattern, 一方面又可以將所需要的參數取出, 豈不快哉!?

分類
Javascript

Regular Expression查黃金門號

這個標題會不會太有趣了一點, 哈!

其實是要介紹 regulare expression 的量詞及參考語法, 我們假設要尋找黃金門號(其實也沒有那麼黃金啦), 例如: 0911213252 (0911213252) 這樣的 pattern, 如何利用 regular expression 來尋找呢? 我們這裡就會用到量詞及參考:

前方的 0911 為 4個數字, 所以直接用 [0-9]{4} , 這裡的 {4} 就代表著一定就是跳過4個數字
第一個不定關鍵字 ([0-9]) , 由於不寫個數, 就代表了一個數字, 而這裡用 ( ) 代表著一個比對的字元之後會用到
接下來就固定 2個數字, 所以用 [0-9]{2}
再接下來就是第一個參考囉, 也就是參考第 2點的關鍵字, 這裡用 \1 來代表

分類
Javascript

Regular Expression在Javscript下的兩種作法

今天要幫朋友做一個解析 javascript 字串的範例, 其實硬 parse 也是很簡單, 但還是想用更好的方法來進行, 於是利用了 javascript 的 Regular Expression 來做 parse 的行為.

在 javascript 中, 使用 Regular Expression 的方式有兩種, 一種是利用 new RegExp , 一種是直接用 perl 的那種語法 /xxxxx/ 的方式, 我們來看看怎麼做吧:

題目是將網址列中的某一參數取出來, 例如 param 這個參數,
http://host/j.htm?a=1&param=data&b=2
其中的 param 參數的值為 data, 利用 Regular Expression 的取出方式如下:

var re = new RegExp("param=([a-z]+)");
var m = re.exec(window.location);
if(m) alert(m[1]);

利用了比對字串 param=([a-z]+) 來將 param 的參數值取出, 其中的 m 內容將會是 [0] 為整個 Regular Expression 的字串, [1] 會是第一個取出的值, 若有多個比對的 () 小括號, 就放到 [2], [3]… 以此類推.

這樣的執行結果就會取出 “data” 這個值.