一路以來遇到正則表達式的地方都是直接去百度的,由於感受大部分遇到的正則表達式的地方都是很常見的。此次順便總結下正則表達式比較難記的部分,方便本身往後查閱吧( ̄. ̄)正則表達式
感受MDN裏面的資料仍是挺不錯的,特此記錄下裏面提到過的我的感受比較難記的部分。數組
若是?緊跟在任何量詞 *、 +、? 或 {} 的後面,將會使量詞變爲非貪婪的(匹配儘可能少的字符),和缺省使用的貪婪模式(匹配儘量多的字符)正好相反。例如,對 "123abc" 應用 /d+/ 將會返回 "123",若是使用 /d+?/,那麼就只會匹配到 "1"。
還能夠運用於向前斷言,如 x(?=y) 和 x(?!y) 。ide
js提供了很多使用正則表達式的方法。如RegExp的exec,和String的match、replace、search和split方法。ui
當你想要知道在一個字符串中的一個匹配是否被找到,你能夠使用test或search方法;想獲得更多的信息(可是比較慢)則能夠使用exec或match方法。若是你使用exec或match方法而且匹配成功了,那麼這些方法將返回一個數組而且更新相關的正則表達式對象的屬性和預約義的正則表達式對象(詳見下)。若是匹配失敗,那麼exec方法返回null(也就是false)。code
從前每每傻傻分不清match和exec的區別,由於二者的做用都是匹配字符串,返回數組,可是在不一樣狀況下二者所返回的內容是不一樣的。對象
// 示例: 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']
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']
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']