1. 程式人生 > >使用js中的exec()方法構造正則表示式驗證

使用js中的exec()方法構造正則表示式驗證

     一、Javascript中的正則表示式

    在Javascript中,可以使用RegExp物件構造正則表達。我們需要新建一個例項化的RegExp()物件,可以傳入兩個引數:第一個引數是匹配的模式,第二個引數是一個可選項,可以傳入三種引數。i表示不區分大小寫,g表示全域性匹配,即匹配所有的符合條件的字串,m表示執行多次匹配。例項如下:

var reg = new RegExp("Hello", "i");   //表示匹配字串中的Hello字串,並且不區分大小寫。

    二、使用exec進行模式匹配

    RegExp中有一個方法可以進行模式匹配並返回結果:exec()。該方法非常重要,基本是使用js進行模式匹配必用的函式。然而該函式的返回值有很多人並不清楚,因此在實際使用的時候經常會出錯。在這裡系統的介紹一些exec()的使用方法。

    exec()的基本格式為:RegExpObject.exec(string),其中RegExpObject為設定好的正則匹配物件,string為待匹配的字串。如果成功匹配,則返回一個數組;如果沒有成功匹配的字串部分,則返回null。

    這裡的重點就在於這個陣列。陣列返回的到底是什麼呢?可以看一下下面這個實驗.

var re = new RegExp("[?#&]" + user + "=([^&#]*)", "i")

這段程式碼進行了一個url的匹配,可以用來獲得user=後面的引數部分,那麼如果使用一個url並且用這個模式進行exec操作,結果會返回什麼呢?比如我們有如下

www.qq.com?user=Tom&psw=123456

exec返回的陣列結果為:[?user=Tom, Tom]。可以看到返回陣列的第一個元素就是整個的匹配模式所匹配到的字串,而第二個匹配到的字元恰好是引數值。這是exec匹配返回

的規則:第一個元素為整個的匹配字串,從第二個引數開始返回模式中每一個()所定義的分組所匹配的字串。這裡面([^&#]*)返回的就是不以&或#開頭的字串,即後面對應的

引數。

如果我們將定義的模式修改為[?#&]" + (user) + "=([^&#]*),那麼exec()後返回的陣列就是[?user=Tom, user, Tom]。