一路以来遇到正则表达式的地方都是直接去百度的,由于感受大部分遇到的正则表达式的地方都是很常见的。此次顺便总结下正则表达式比较难记的部分,方便本身往后查阅吧( ̄. ̄)正则表达式
感受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']