正則表達式對象有兩個定義方式::
1、第一種定義:
new RegExp(pattern, attributes);如var reg = new RegExp("abc","g")
其中pattern為表示表達式內容,如上表示匹配abc
attributes:g,全局匹配钙畔,i不區(qū)分大小寫茫陆,m執(zhí)行多行匹配,用最多的為g和i
2擎析、第二種定義:/pattern/attributes.
如:var reg = /abc/g;
正則表達的規(guī)則一些規(guī)則在此不再說明盅弛,只記錄exec和match的區(qū)別:
1、exec是正則表達式的方法叔锐,而不是字符串的方法挪鹏,它的參數(shù)才是字符串,如下所示:
如上定義
var reg = new RegExp("abc") ;
var str = "3abc4愉烙,5abc6";
reg.exec(str );
2讨盒、match是字符串執(zhí)行匹配正則表達式規(guī)則的方法,他的參數(shù)是正則表達步责,如
var reg = new RegExp("abc") ;
var str = "3abc4,5abc6";
str.match(reg);
3返顺、exec和match返回的都是數(shù)組;
如果exec執(zhí)行的正則表達式沒有子表達式(小括號內的內容蔓肯,如/abc(\s*)/中的(\s*) )遂鹊,如果有匹配,就返回第一個匹配的字符串內容蔗包,此時的數(shù)組僅有一個元素秉扑,如果沒有匹配返回null;
var reg = new RegExp("abc") ;
var str = "3abc4,5abc6";
alert(reg.exec(str));
alert(str.match(reg));
執(zhí)行如上代碼酌畜,你會發(fā)現(xiàn)兩者內容均為一樣:abc擅这,
4匠楚、如果定義正則表達對象為全局匹配如:
var reg = new RegExp("abc","g") ;
var str = "3abc4,5abc6";
alert(reg.exec(str));
alert(str.match(reg));
則 為abc和abc,abc剃幌;因為match執(zhí)行了全局匹配查詢;而exec如果沒有子表達式只會找到一個匹配的即返回忧吟。
5件蚕、當表示中含有子表達式的情況:
var reg = new RegExp("a(bc)") ;
var str = "3abc4,5abc6";
alert(reg.exec(str));
alert(str.match(reg));
你會發(fā)現(xiàn)兩者執(zhí)行的結果都是:abc,bc;
6盟迟、當如果正則表達式對象定義為為全局匹配
var reg = new RegExp("a(bc)","g") ;
var str = "3abc4,5abc6";
alert(reg.exec(str));
alert(str.match(reg));
則兩者返回的結果是abc,bc和abc,abc,
總結為:
1裆装、當正則表達式無子表達式踱承,并且定義為非全局匹配時倡缠,exec和match執(zhí)行的結果是一樣,均返回第一個匹配的字符串內容茎活;
2毡琉、當正則表達式無子表達式,并且定義為全局匹配時妙色,exec和match執(zhí)行,做存在多處匹配內容慧耍,則match返回的是多個元素數(shù)組身辨;
3、當正則表達式有子表示時芍碧,并且定義為非全局匹配煌珊,exec和match執(zhí)行的結果是一樣如上邊的第5種情況;
4泌豆、當正則表達式有子表示時定庵,并且定義為全局匹配,exec和match執(zhí)行的結果不一樣踪危,此時match將忽略子表達式蔬浙,只查找全匹配正則表達式并返回所有內容,如上第6種情況贞远;
也就說畴博,exec與全局是否定義無關系,而match則于全局相關聯(lián)蓝仲,當定義為非全局俱病,兩者執(zhí)行結果相同
參考
http://www.jb51.net/article/46374.htm