用正则虽多
但是对这个对象并不是很了解,所以做点笔记 记的是一些我不熟悉的东西 嘿嘿.............
例化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
//继续执行 同理了