星期四, 八月 23, 2007

Javascript Regex 的 字串比對(Match) 與 取代(Replace)

Javascript 的 Regex 該怎麼使用, 如何做 Match 和 Replace 的動作, 語法該怎麼寫.

先來一個簡單的 HTML source

<form name="form_name">
    <input type="text" name="input_name" id="id_name" value="">
</form>

抓取 Input Value 

// 直接抓取 form input value
var var_value = form_name.input_name.value;
// 若欄位有 id="id_name", 則用 var var_value = getElementById('id_name');

檢查輸入值是不是數字(Match) 

// 可參考: JavaScript match() Method
// stringObject.match(searchvalue)
// match 語法: variable.match(regex), return null/regex value
var score = 12; // 1.2, 1., 1, -1.2, -1, -1., -1.25, -12., -13, -133.235, 133.235
var regex = /^-?\d+\.?\d*?$/;
if (score.match(regex)==null) {
    alert("不是數值");
}

字串取代(Replace)

// 參考: JavaScript replace() Method
// stringObject.replace(findstring,newstring)
// replace 語法: variable.replace(regex, '要取代成什麼字')
var str = "this is a book123!";
var regex=/book\d+/gi;  // 不能寫成 regex="/book\d+/gi";
alert(str.replace(regex,"test")); // 把 book123 取代成 test

其它

相關標籤

this is comment icon 能否動態產生正規表達式 [回覆]

Tsung兄你好!誠心的請教您一些問題:

var oldString = '44+4';
newString = oldString.replace(/4/g,'#');
預期結果是 44+#,但結果是 ##+#

我去趴文之後,似乎要用「^匹配的是字符的開頭」和「$匹配的是字符的結尾」,於是修改如下:
var oldString = '44+4';
newString = oldString.replace(/^4$/g,'#');
但結果是 44+4 沒有改變。JS的正規表達式似乎跟PHP有些出入

所以此段結論為「如何取代字串中指定的數字?」

另外一個想法是,是否有辨法動態產生「正規式」,預期的程式會如下:
var num_arr = Array(1,3,5);
var oldString = '1+2+3+4+5+6';
for(var i=0; i

Comment by sankai (07/25/2008 17:39)

this is comment icon 回 sankai [回覆]

不好意思, 您下面的程式我沒有看到完整的, 所以不知道該怎麼跟您說~
然後上面的表達式, 您寫法只要 newString = oldString.replace(/4$/g,'#'); 這樣子就可以囉~ :)

Comment by Tsung (07/25/2008 23:38)

this is comment icon 取代文字中的數值似乎要手動寫函式了 [回覆]

剛經過測試replace(/4$/g,'#')方式
在一個字串含有多個重複的字元時,似乎只會取代最後一個出現的字元
str = '4+44+44+4';0
str.replace(/4$/g,'#');
//預期為'#+44+44+#'
//結果為'4+44+44+#'

至於動態產生規式,在上述方式都未能達成的情況上,就先暫不考慮了=_=
最後還是仍然感謝Tsung兄的回覆,看來我得跟這個問題撕殺一陣子了

Comment by sankai (07/26/2008 20:21)

this is comment icon 回 sankai [回覆]

我寫的那個只是要取代最後一個, 因為你上面的範例是跟我說只要取代最後一個說~ @.@a..
至於要取代前面, 我通常會在下面再多作一次取代前面的動作, 用 "^4" 即可~ :)
就是兩次 replace 就搞定囉 :)

Comment by Tsung (07/26/2008 21:50)
Add this page to del.icio.us Add this page to Yahoo Taiwan's bookmark Add this page to MyShare

發表迴響

標題

內容 (限制 1000 字)

暱稱

電子郵件

個人網頁


 authimage


PS: 若無法留言, 請先確認是否有打開 JavaScript, 造成您的困擾, 實在萬分對不起 Orz...(如果無法留言, 勞煩可以發信給我好嗎? 謝謝.)
PS2: 若您的留言被誤判, 我都會再自行看過, 不需要一直重覆張貼~