【JavaScript】RegExp、Math、Date

摘要

日期转字符串:
date.toString();->中国标注时间格式
date.toGMTString();->转为国际标准时间
date.toLocaleString();->转为操作系统当地时间格式
*date.toLocaleDateString();
->转为操作系统当地时间格式,仅包含日期部分
date.toLocaleTimeString();
->转为操作系统当地时间格式,仅包含时间部分

【JavaScript】RegExp、Math、Date

1. ***RegExp: 专门封装一个正则表达式,提供用正则表达式执行查找和验证的API 的对象
1. 创建:
1. 直接量: var reg=/正则/ig;
何时使用: 如果正则是固定的,不需要动态拼接
转义: 如果包含/,都要转为\/
2. 使用new关键字: var reg=new RegExp("正则"[,"ig"]);
何时使用: 如果正则不是现成的,需要运行时拼接
转义: 如果包含"或',都要转为\"和\'
如果包含\d,\w,\s,必须写成\\d,\\w,\\s
2. API:
1. 查找关键词:查找每个关键词的内容和位置
var arr=reg.exec(str);
意为: 在str中查找下*一个*和reg匹配的关键词
返回值: arr: [kword,$1,$2,...]
0
arr.index: 保存了本次找到的关键词的位置
如果没找到返回null
原理: 默认从开头查找下一个关键词
如果找到,就将将关键词保存在结果数组的第一个元素
将关键词位置保存在结果数组的index属性中
exec自动将reg的lastIndex调整到本次找到的关键词之后
reg.lastIndex: 标识正则下次匹配的开始位置
课堂练习:
贪婪模式: 正则表达式默认匹配最长的符合条件的字符串
比如: .* .+
懒惰模式: 让正则仅匹配最短的符合条件的字符串
贪婪->懒惰: (.*?) (.+?)

1. ***RegExp:
1. 查找关键词:查找每个关键词的内容和位置
var arr=reg.exec(str);
返回值: arr:[kword,$1,$2,...]
arr.index: 本次找到的关键词的位置
RegExp.$n: 直接获取第n个分组的子内容
强调: reg要加g,才能反复查找所有。
不加g,仅查找第一个关键词
2. 验证: var bool=reg.test(str);
验证要求完整匹配,通常前加^,后加$,不加g
意为: 验证str是否和reg的规则完整匹配
身份证: \d{15}(\d\d[0-9Xx])?

2. Math: 专门提供数学计算的常用API的对象
不能new!
1. 取整:
Math.ceil(num): 上取整: 只要超过,就取下一个整数
Math.floor(num): 下取整: 只要超过,就省略小数部分
位运算也可实现下取整: m^0 m|0 m>>>0
Math.round(num): 四舍五入取整:
vs toFixed(d): d只能在0~20之间,只能返回字符串
2. 乘方和开平方:
Math.pow(底数,幂): Math.pow(10,2)=100
Math.sqrt(num): 将num开平方
3. 最大值和最小值:
Math.max(值1,值2,...): 在给定的多个值中返回最大的一个值
Math.min(值1,值2,...)
问题: 默认不支持查找数组中的最大值
解决: Math.max.apply(Math,arr):返回arr数组中最大元素
4. 随机数:
Math.random(): 0<=r<1
公式: 任意最大值max最小值min之间取随机整数
parseInt(Math.random()*(max-min+1)+min);
简化: 在0~任意值之间取随机整数
parseInt(Math.random()*(max+1))

做一个彩票生成的小程序

<script>
			function doubleBall(){
				var reds=[];
				var biue=0;
				while(reds.length<6){//反复生成红球,如果length<6
					r=parseInt(Math.random()*33+1);//在1~33之间生成一个随机数,保存在r中
					reds.indexOf(r)==-1&&reds.push(r);//如果reds中没有找到r;将r压入reds中
				}//循环结束
				blue=parseInt(Math.random()*16+1);//在1~16之间生成一个随机数,保存在blue中
				reds.sort(function(a,b){return a-b})//将reds按数字升序排序
				alert(reds+"|"+blue);//弹出reds+"|"+blue
			}
		</script>

HTML代码

<button onclick="doubleBall()">机选</button>

 

3. *Date: 专门封装一个时间点,提供操作时间的API
何时使用: 只要在程序中保存日期或时间,都要用Date对象
创建: 4种:
1. 创建日期对象同时获得客户端系统时间: var now=new Date();
2. 创建自定义时间的日期对象:
var date=new Date("yyyy/MM/dd hh:mm:ss");
var date=new Date(yyyy,MM-1,dd,hh,mm,ss);
3. 复制一个日期:
假设: var d1=new Date("yyyy/MM/dd hh:mm:ss);
var d2=new Date(d1);
日期的原理:
日期对象中,封装的起始是一个1970年1月1日0点至今的毫秒数

日期API:
日期的分量/单位:
FullYear Month Date Day
Hours Minutes Seconds Milliseconds
1. 每个分量都有一对儿getXXX()、setXXX()方法
date.getxxx()方法,获取一个分量的值
date.setxxx(n)方法,设置一个分量的值
特殊: Day,没有set方法()
2. 取值范围:
月中的日: 1~31 不用修正
星期: 0~6 不用修正
月: 0~11 ***要修正: 计算机中的月份至比现实小1
时: 0~23 不用
分秒: 0~59 不用

日期计算:
1. 两日期可相减,结果为毫秒差
2. 对日期的分量做加减: 3步:
1. 取出来: var n=date.getXXX();
2. 做加减:
3. 放回去: date.setXXX(修改后的n)
setXXX方法可根据传入的数值,自动调整进制
强调: setXXX方法直接修改原日期对象
其实可简化为: date.setXXX(date.getXXX()+/-n)

日期转字符串:
date.toString();->中国标注时间格式
date.toGMTString();->转为国际标准时间
date.toLocaleString();->转为操作系统当地时间格式
*date.toLocaleDateString();
->转为操作系统当地时间格式,仅包含日期部分
date.toLocaleTimeString();
->转为操作系统当地时间格式,仅包含时间部分

李东辉

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:6   其中:访客  6   博主  0

  1. avatar 生晓's blog 4

    够全面

  2. avatar 米粒博客 4

    好多 记不住