javascript正則全域匹配g慎用test方法

來源:互聯網
上載者:User

來自:http://www.coding123.net/article/20130108/javascript-regex-global-matcth-care-of-test-method.aspx

先看一道JavaScript題目,據說是國內某知名互連網企業的JavaScript筆試題,如果對正則的全域匹配模式不瞭解的話可能會對下面的輸出結果感到疑惑。

var str = "123#abc";var re = /abc/ig;console.log(re.test(str)); //輸出tureconsole.log(re.test(str)); //輸出falseconsole.log(re.test(str)); //輸出tureconsole.log(re.test(str)); //輸出false

     在建立Regex對象時如果使用了“g”標識符或者設定它了的global屬性值為ture時,那麼新建立的Regex對象將使用模式對要將要匹配的字 符串進行全域匹配。在全域匹配模式下可以對指定要尋找的字串執行多次匹配。每次匹配使用當前正則對象的lastIndex屬性的值作為在目標字串中開 始尋找的起始位置。lastIndex屬性的初始值為0,找到匹配的項後lastIndex的值被重設為匹配內容的下一個字元在字串中的位置索引,用來 標識下次執行匹配時開始尋找的位置。如果找不到匹配的項lastIndex的值會被設定為0。當沒有設定正則對象的全域匹配標誌時lastIndex屬性的值始終為0,每次執行匹配僅尋找字串中第一個匹配的項。可以通下面的代碼來查看在執行匹配相應的lastIndex
屬性的值。


var str = "123#abc";var re = /abc/ig;console.log(re.test(str)); //輸出tureconsole.log(re.lastIndex); //輸出7console.log(re.test(str)); //輸出falseconsole.log(re.lastIndex); //輸出0console.log(re.test(str)); //輸出tureconsole.log(re.lastIndex); //輸出7console.log(re.test(str)); //輸出falseconsole.log(re.lastIndex); //輸出0

關於RegExp.prototype.exec(str)方法和String.prototype.math(rgExp)方法

    正則對象的test方法傳回值為true或flase,在僅需要檢測目標字串與指定模式是否匹配,但不需要擷取匹配內容時這個方法非常有用。當需要擷取 匹配結果時就需要用RegExp類型的exec(str)方法或String類型的match(rgExp)方法。

    RegExp.prototype.exec(str)方法返回NULL或返會一個數組,在數組的第0個元素存放的是在字串str中尋找到的匹配內容,1到n個元素返回的是在模式中使用括弧"()"指定的子匹配項的內容。

    在沒有使用全域標誌時String.prototype.math(rgExp)方法和RegExp.prototype.exec(str)的行為類 似。當設定了全域匹配標誌時String.prototype.math(rgExp)方法返回的數組項元素0到n中包含了所有匹配到的項不包含子匹配 項。這時可以使用RegExp.$1..$9擷取9個子匹配。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.