正則表達式難記點總結

一路以來遇到正則表達式的地方都是直接去百度的,由於感受大部分遇到的正則表達式的地方都是很常見的。此次順便總結下正則表達式比較難記的部分,方便本身往後查閱吧( ̄. ̄)正則表達式

正則表達式中的特殊字符

感受MDN裏面的資料仍是挺不錯的,特此記錄下裏面提到過的我的感受比較難記的部分。數組

  1. ?:匹配前面一個表達式0次或者1次。等價於 {0,1}。此外,?還有一個比較重要的用途,即

若是?緊跟在任何量詞 *、 +、? 或 {} 的後面,將會使量詞變爲非貪婪的(匹配儘可能少的字符),和缺省使用的貪婪模式(匹配儘量多的字符)正好相反。例如,對 "123abc" 應用 /d+/ 將會返回 "123",若是使用 /d+?/,那麼就只會匹配到 "1"。
還能夠運用於向前斷言,如 x(?=y) 和 x(?!y) 。ide

  1. (x):捕獲括號。匹配 'x' 而且記住匹配項。在匹配中能夠使用一、二、n表示括號中的內容,而在替換中,則使用$一、$二、$n。
  2. (:x): 非捕獲括號。匹配 'x' 可是不記住匹配項。
  3. x(?=y):匹配'x'僅僅當'x'後面跟着'y'.這種叫作正向確定查找。例如,/Jack(?=Sprat)/會匹配到'Jack'僅僅當它後面跟着'Sprat'。/Jack(?=Sprat|Frost)/匹配‘Jack’僅僅當它後面跟着'Sprat'或者是‘Frost’。可是‘Sprat’和‘Frost’都不是匹配結果的一部分。
  4. x(!=y):匹配'x'僅僅當'x'後面不跟着'y',這個叫作正向否認查找。例如,/d+(?!.)/匹配一個數字僅僅當這個數字後面沒有跟小數點的時候。正則表達式/d+(?!.)/.exec("3.141")匹配‘141’可是不是‘3.141’

使用正則表達式的js方法

js提供了很多使用正則表達式的方法。如RegExp的exec,和String的match、replace、search和split方法。ui

當你想要知道在一個字符串中的一個匹配是否被找到,你能夠使用test或search方法;想獲得更多的信息(可是比較慢)則能夠使用exec或match方法。若是你使用exec或match方法而且匹配成功了,那麼這些方法將返回一個數組而且更新相關的正則表達式對象的屬性和預約義的正則表達式對象(詳見下)。若是匹配失敗,那麼exec方法返回null(也就是false)。code

match與exec區別

從前每每傻傻分不清match和exec的區別,由於二者的做用都是匹配字符串,返回數組,可是在不一樣狀況下二者所返回的內容是不一樣的。對象

  • 當正則表達式包含子表達式且不包含全局標誌g時,兩者返回相同的數組。
// 示例:

var str = 'cat10,bat20,kat30';
var patten = /w(at)d+/;
var arr = str.match(patten);
arr[0] <=> ['cat10']
arr[1] <=> ['at']

var arr = patten.exec(str);
arr[0] <=> ['cat10']
arr[1] <=> ['at']
  • 當正則表達式帶有全局標誌g時,兩者表現不一致。
    match會返回全部符合條件的匹配項,並以數組形式返回。數組第一項存放第一個匹配項,數組第二項存放第二個匹配項...依次類推。

exec則永遠返回第一個匹配項。可是當連續調用exec時,則每次的返回值都是下一個匹配項。ip

// 示例1:

var str = 'cat,bat,kat';
var patten = /at/g;
str.match(patten);  //['at', 'at', 'at']
patten.exec(str);  //['at']


// 示例2:

var str = 'cat,bat,kat';
var patten = /w+/g;
str.match(patten);  //['cat', 'bat', 'kat']

//第一次調用
patten.exec(str);  //['cat']
//第二次調用
patten.exec(str);  //['bat']
//第三次調用
patten.exec(str);  //['kat']
  • 當正則表達式包含子表達式時且包含全局標誌g時,兩者表現不一致。
    match會返回全部符合條件的匹配項,並以數組形式返回。這時,match不會再返回子表達式的匹配項了。數組第一項存放第一個匹配項,數組第二項存放第二個匹配項...依次類推。

exec會返回子表達式的匹配項。換句話說就是,數組第一項存放整個匹配項,數組第二項存放第一個子表達式匹配項,數組第三項存放第二個子表達式匹配項...依次類推。字符串

// 示例:

var str = 'cat10,bat20,kat30';
var patten = /w(at)d+/g;
var arr = str.match(patten);  //['cat10', 'bat20', 'kat30']
var arr = patten.exec(str);
arr[0] <=> ['cat10']
arr[1] <=> ['at']
相關文章
相關標籤/搜索