打卡时间:
15:30-16:00
21:40-22:40
RegExp实例属性
RegExp的每个实例都具有下列属性,通过这些属性可以取得有关模式的各种信息。
● global:布尔值,表示是否设置了g标志
● ignoreCase:布尔值,表示是否设置了i标志
● lastIndex:整数,表示开始搜索下一个匹配项的字符位置,从0算起。
● multiline:布尔值,表示是否设置了m标志。
● source:正则表达式的字符串表示,按照字面量形式而非传入构造函数中的字符串模式返回。
source属性保存的是规范形式的字符串,即字面量形式所用的字符串
RegExp实例方法
RegExp对象的主要方法是exec(),该方法是专门为捕获组而设计的。exec()接受一个参数,即要应用模式的字符串,然后返回包含第一个匹配项信息的数组;或者在没有匹配项的情况下返回null。返回的数组虽然是Array的实例,但包含两个额外的属性:index和input。其中,index表示匹配项在字符串中的 位置,而index表示应用正则表达式的字符串。
var text = 'mom and dad and baby'
var pattern = /mom( and dad( and baby)?)?/gi
var matches=pattern.exec(text);
alert(matches.index);//0
alert(matches.input);//"mom and dad and baby"
alert(matches[0]);
alert(matches[1]);
alert(matches[2]);
正则表达式的第二个方法是test( ),它接收一个字符串参数。在模式与该参数匹配的情况下返回true;否则,返回false。在只想知道目标字符串与某个模式是否匹配,但不需要知道其文本内容的情况下使用这个方法非常方便。因此test( )方法经常被用在if语句中。例:
var text = "000-00-0000";
var pattern = /\d{3}-\d{2}-d{4}/;
if(pattern.test(text)){
alert("The pattern was matched.");
}
//这个例子中使用正则表达式来测试了一个数字序列号。如果输入的文本与模式匹配,则显示一条消息。我们只关心它输入是否有效,至于它为什么无效无关紧要
RegExp构造函数属性
RegExp构造函数包含一些属性(这些属性在其他语言中被看成是静态属性)。这些属性适用于作用域中的所有正则表达式,并且基于所执行的最近一次正则表达式操作而变化。
这些属性都有一个独特之处,就是可以通过两种方法访问它们。
image.png
使用这些属性可以从exec()或test()执行的操作中提取出更具体的信息。
var text = "this has been a short summer" ;
var pattern = /(.)hort/g;
if(pattern.test(text)){
alert(RegExp.input);//this has been a short summer
alert(RegExp.leftContext);//this has been
alert(RegExp.rightContext);//summer
alert(RegExp.lastMatch);//short
alert(RegExp.lastParen);//s
alert(RegExp.multiline);//false
}
模式的局限性
尽管ECMAScript中的正则表达式功能还是比较完备的,但仍然缺少某些语言所支持的高级正则表达式特性。下面流出了ECMAScript正则表达式不支持的特性。
◆ 匹配字符串开始和结尾的\A和\Z锚
◆ 向后查找(lookbehind)
◆ 并集和交集类
◆ 原子组(atomic grouping)
◆ Unicode支持(单个字符串除外,如\uFFFF)
◆ 命名的捕获组
◆ s(single,单行)和(free-spacing,无间隔)匹配模式
◆ 条件匹配
◆ 正则表达式注释
该方法通过传入两个时间点,来计算两个时间点之间的时间差,并将其转化成天时分秒
例子:
//var start = Date.now("2018/11/11");
//var endDate = Date.now('2018/12/12);
function getDate(startDate, endDate) {
// endDate-start
// 是否先把两个时间转换为字符串 ,
//再以结束的时间减去开始的时间,
//将两个时间的字符串再次转换为时间?
}
var start = Date.parse("2018/11/11 12:58:12");
var endDate = Date.parse("2018/12/12");
function getDays(start,endDate) {
var second = (endDate-start)/1000;
var min=second/60;
var hour=min/60;
var day=hour/24;
return days;
};
function getDate(start,endDate) {
var mill = endDate-start;//
var days=parseInt(mill/(1000*60*60*24))//30.459583333333335
var leftDays=mill/(1000*60*60*24)-days;//0.459583333333335
var hours=parseInt(leftDays*24);//11
var leftHours=leftDays*24-hours;//0.030000000000040217
var min=parseInt(leftHours*60);//1
var letfMin=leftHours*60-min;//0.800000000002413
var second=parseInt(letfMin*60);
var leftSecond=letfMin*60-second;//
var mills=leftSecond*1000;
return days+" "+hours+" "+min+" "+second+" "+mills;
};
网友评论