2007年1月25日 23:26

Regular Expression (RegExp) in JavaScript

「石頭閒語」已轉移到 rocksaying.tw 。 本文新網址請點擊此連結:《閱讀全文》。
Regular Expression (RegExp) in JavaScript

  • shirock 發表於樂多JavaScript編輯本文
    樂多分類:學術/學習切換閱讀版型
    贊助商廣告
     
    引用列表:
    在 C 程式中,使用 Regex (Regular Expression) library
    在 C 程式中,使用 Regex (Regular Expression) library【石頭閒語】 at 2007年8月5日 17:01
    剛要修改 lighttpd 的 rewrite rule, 所以就要看一下 RegExp 要怎麼寫,才可以符合我的需求。
    【J】Regular Expression (RegExp) in JavaScript【My Life】 at 2009年4月2日 17:43
    Regular Expression (RegExp) in JavaScript 從http://cgi.blog.roodo.com/trackback/2670695轉載 Regular Expression (以下簡稱 REGEX) 是以一組特定字元符號描述字串樣式規則的
    Regular Expression (RegExp) in JavaScript【十年生死兩茫茫】 at 2010年1月15日 09:00
    回應文章
    感謝你的整理,對我幫助很大。
    | 檢舉 | Posted by Lak at 2008年5月16日 13:49

    整理得好仔細 感恩
    | 檢舉 | Posted by Javason at 2008年7月21日 15:06

    哇!Example 2的REGEX 測試工具是大大您自己寫的嗎?好厲害唷!!
    謝謝您的分享~很受益呢!
    ^_^
    | 檢舉 | Posted by Fay at 2008年12月25日 15:57

    Good resource for me to understand.

    Thank you.
    | 檢舉 | Posted by industrialist at 2009年10月10日 16:58

    感謝整理!!
    獲益良多~
    | 檢舉 | Posted by Mark at 2010年9月20日 11:13

    石頭大你好:
    今天拜讀你的文章,收穫良多,不過不知道你有沒有遇到下列的問題:
    我將你的REGEX test form的原始碼整個copy至我的本機執行後,卻發現在Split執行的結果和在你網站上執行的結果不同。
    例如:
    split_string = "My~Silly.Test-String"
    pattern = /(~|\.|-)/
    在你的網頁中return ['My', '~', 'Silly', '.', 'Test', '-', 'String']
    但是在我的本機中卻return
    ['My', 'Silly', 'Test', 'String']

    我Google了一下,發現其他人在IE中也有這樣"Split broken"的問題,那個人利用regex.match的方式去另寫一個新method.
    我看石頭大的code也十分標準~真的令我十分困惑 ==
    PS:解法網頁出處 : http://blog.stchur.com/2007/03/28/split-broken-in-ie/
    | 檢舉 | Posted by 困惑的路人 at 2010年12月21日 16:16
    按照我對 ECMAScript 第5版規範(最新版)的解讀, IE 的結果是錯的。

    --
    If separator is undefined, then the result array contains just one String, which is the this value (converted to a String).

    ECMA-262 5th edition, p.147
    --

    我又實際測了 Chrome, Opera 它們的結果,也跟 Firefox 一樣。符合的分割樣式內容,要留在回傳的陣列中。
    | 檢舉 | Posted by 遊手好閒的石頭成 at 2011年1月3日 12:15
    請問大大,ignoreCase和global是什麼意思?
    | 檢舉 | Posted by allneplay at 2012年1月6日 16:25
    如同英文字典上的意思。

    ignore case 勿略大小寫。

    global 找全部。因為 REGEX 預設碰到第一個符合的內容就結束比對。
    | 檢舉 | Posted by 遊手好閒的石頭成 at 2012年1月6日 17:37
    請問大大,我想比對一個字串可以接受
    1.中文字
    2.英文(中間可含空白,如fisrt name 跟 last name的組合)
    3.不可接受全空白
    請問這該怎麼寫
    看完你的教學,能力不足的我只會寫2+3的...
    | 檢舉 | Posted by 訪客 at 2013年1月13日 14:28
    很難。因為你要排除掉所有的特殊符號,也就是類似 [^\s~`!@#$%^&*_-] 這種規則。下面這行可以滿足你的部份需求:

    ^[^\s~`!@#$%^&*_-]+\s?[^\s~`!@#$%^&*_-]+$

    為什麼說是部份?因為還有很多標點符號沒有列進排除名單中。
    | 檢舉 | Posted by 遊手好閒的石頭成 at 2013年1月14日 17:25

    請問大大~為什麼^([0-9]{4})[./]{1}([0-9]{1,2})[./]{1}([0-9]{1,2})$
    去match日期格式假設2008/5/7,會存出陣列2008,5,7,我還是搞不太懂
    | 檢舉 | Posted by 訪客 at 2013年8月7日 18:16

    請問大大~為什麼^([0-9]{4})[./]{1}([0-9]{1,2})[./]{1}([0-9]{1,2})$
    去match日期格式假設2008/5/7,會存出陣列2008,5,7,我還是搞不太懂
    | 檢舉 | Posted by 訪客 at 2013年8月7日 18:16
    因為你沒搞懂()的意思
    | 檢舉 | Posted by A_A at 2014年5月10日 14:53

    石頭大您好:
    拜讀您的文章後,有個問題想問問,就是regex是否適用於全形字呢,如12...90AB...Z?如果可以,那應該如何寫出regex呢?
    感謝您
    | 檢舉 | Posted by anjrlia at 2014年6月26日 11:21
    這要看你使用的 regex library 是否支援 unicode 或 utf-8 。
    例如瀏覽器中的 javascript 支援 unicode ,所以可以用全形。例如 /[12]/ ,這可以判斷字串中是否包含一個全形的 1 或 2 。

    至於 PHP 5 用的 regex library 還不支援 unicode ,所以不能用全形。事實上,你用了也不會得到正確比對結果。

    例如 樣式 /[1]/ 去比 字串 "ab2c" (樣式是全形1,字串有全形2),在 JavaScript 會正確告訴你不合,但 PHP 會說1個符合。

    因為在 PHP 眼中,全形 1 被視為兩個字元(byte),故 /[1]/ 在 PHP 眼中是兩個字元其中之一的樣式。
    而全形2的第一個byte和全形1一樣,故 PHP 判定第1個 byte 符合樣式。
    | 檢舉 | Posted by 遊手好閒的石頭成 at 2014年6月26日 16:26