用正則雖多
但是對這個對象並不是很瞭解,所以做點筆記 記的是一些我不熟悉的東西 嘿嘿.............
例化RegExp對象
1.直接寫
var reg = /\d+/g
2.new RegExp
new RegExp("\\d+","g")
(1) i,g,m放在第2個參數上
(2) 斜槓要轉義 所以是\\
第一種用法很常見了 我也喜歡直接這麼用(主要是因爲那些字符要轉義 我不是很清楚)
第2中在某種字符串不確定的時候還是很有用的 比如一下的例子
var str = '<div class="your sister" id="myid" name="myname" sister="yousister"></div>';
function getAttr(attr,str){
var reg = new RegExp(attr+"\\s*=\\s*(['\"]?)(.*?)\\1");
return reg.exec(str)[2];
}
getAttr("id",str);
getAttr("class",str);
getAttr("name",str);
getAttr("sister",str);
RegExp實例屬性
global 布爾值,表示是否標識了g.
ignoreCase 布爾值,表示是否標識了i.
multiline 布爾值,表示是否標識了m.
source 字符串,表示創建RegExp對象實例時指定的表達式文本字符串.
lastIndex 整數,表示開始搜索下一個匹配項的字符位置,從0開始算 (ps只是設置了g ,然後執行exec或者test 纔會從下一個開始算, 不然一直從0開始算)
例子
var reg = /ab\d+/g;
alert(reg.global); //true
alert(reg.ignoreCase); //false
alert(reg.multiline); //false
alert(reg.source); //ab\d+
lastIndex的例子
var reg = /\d+/;
var str = "123asd456vbn789";
alert(reg.exec(str)); //123
alert(reg.lastIndex); //0
alert(reg.exec(str)); //123
alert(reg.lastIndex); //0
alert(reg.exec(str)); //123
alert(reg.lastIndex); //0
var reg1 = /\d+/g; //設置了g
alert(reg1.lastIndex); //0
alert(reg1.exec(str)); //123
alert(reg1.lastIndex); //3
alert(reg1.exec(str)); //456
alert(reg1.lastIndex); //9
alert(reg1.exec(str)); //789
alert(reg1.lastIndex); //15
RegExp構造函數屬性
Input 最近一次zuij匹配的字符串
lastMatch 最近一次的匹配項
lastParen 最近一次的匹配捕獲組
leftContext input中lastMath之前的文本 (是lastMatch 不是lastParen)
rightContext input中lastMath之後的文本
$1-9 表示這次匹配的捕獲組 依次RegExp.$1,RegExp.$2,RegExp.$3,RegExp.$4,
var reg = /<div id="(.*?)" name="(.*?)" class="(.*?)"/,
str = '<div id="myid" name="myname" class="myclass" action="your sister">';
reg.exec(str);
alert(RegExp.$1); //myid
alert(RegExp.$2); //myname
alert(RegExp.$3); //myclass
alert(RegExp.lastMatch); //<div id="myid" name="myname" class="myclass"
alert(RegExp.lastParen); //myclass
var reg1 = /\d+/g,
str1 = '12nm34sdf56oiu78sx';
reg1.exec(str1);
alert(RegExp.leftContext); //空的 因爲12左邊沒有東西
alert(RegExp.rightContext); //nm34sdf56oiu78sx
reg1.exec(str1);
alert(RegExp.leftContext); //12nm
alert(RegExp.rightContext); //sdf56oiu78sx
//繼續執行 同理了