首页 > 代码库 > JS 9
JS 9
1. 正则:
指定匹配位置
2. ***String API:
替换: 衍生: 删除和格式化
切割
3. ***RegExp对象
1. 正则:
指定匹配位置: 三个位置:
字符串的开头 ^
字符串的结尾 $
比如: 开头的空字符: ^\s+
结尾的空字符: \s+$
开头或结尾的空字符^\s+|\s+$
固定套路: 只要希望字符串和正则从头到尾完全匹配
比如同时前加^后加$
只要用正则表达式执行验证时,必须前加^后加$
单词边界 \b 包含: ^ $ 空格 标点
比如: 单词首字母: \b[a-z]
单词尾字母: [a-z]\b
单独的一个单词no: \bno\b
2. ***StringAPI
替换: 简单替换: str=str.replace(/正则/ig, "替换值");
问题: 不能根据不同的关键词,选择不同的值替换
解决: 高级替换:
str=str.replace(/正则/ig,function(kw){
//kw会自动获得本次找到的关键词内容
return //根据不同kw,返回不同的替换值
})
何时: 只要根据不同的关键词,替换不同内容时
衍生:
删除: 将关键词替换为""
格式化: 将原字符串重新拼接为新的格式
比如: "19831226" => "1983年12月26日"
2步: 1. 正则将原字符串分组
/(\d{4})(\d{2})(\d{2})/
// 1 2 3
2. 使用简单替换: str.replace(/正则/,"...$n...")
$n可自动获得第n个分组的子内容
n从1开始
切割: 将原字符串,按指定字符,分隔为多个子字符串
如何: var substrs=str.split(/正则/)
返回切割后的多个子字符串组成的数组
结果中,不再包含分隔符
固定套路: 将字符串打散成字符数组: var chars=str.split("")
3. ***RegExp:
什么是: 封装一条正则表达式, 提供了使用正则表达式进行查找和验证的API
何时: 1. 查询关键词的第四种情况: 即查内容,又查位置
2. 利用正则表达式执行验证
如何:
创建: 2种:
1. 如果正则表达式是固定不变的: var reg=/正则/ig;
强调: /正则/中正则中的/都要转义为\/
2. 如果正则表达式是动态生成的:
var reg=new RegExp("正则"[,"ig"]);
强调: "正则"中的" \ 都要转义为\" \\
比如: "\d{6}" => "\\d{6}"
1. ***RegExp:
2. Math
3. ***Date
1. ***RegExp
API:
验证: 检查字符串是否完全符合正则表达式的要求!
如何: var bool=reg.test(待检测字符串)
强调: 只要验证,reg中必须前加^后加$
查找关键词: 第四种情况: 即找内容,又找位置
如何: var arr=reg.exec(待查找的完整字符串)
在"待查找的完整字符串"中,依次查找每个符合reg要求得关键词。
返回值: 本次找到的一个关键词及其位置
arr[0]: 关键词内容
如果正则中有分组
arr[n]: 自动保存第n个分组匹配的子内容
arr["index"]: 当前关键词位置 -> 可简写为arr.index
如果没找到,返回null
每次查找后,都将reg.lastIndex属性(下次开始位置)修改为当前index+关键词长度,相当跳过当前关键词继续向后找
固定套路: 找所有关键词:
while((arr=reg.exec(str))!=null){
arr[0] 关键词内容
arr[n] 自动获得第n个分组的子内容
arr.index 当前关键词位置
}
如果只需要分组的子字符串,不需要完整关键词:
可省略arr,用RegExp.$n
while(reg.exec(str)!=null){
RegExp.$n 自动获得第n个分组的子内容
}
练习:
贪婪模式: 正则表达式默认匹配最长的符合条件的子字符串
默认使用贪婪模式
.* .+
懒惰模式: 仅匹配最短的符合条件的子字符串
贪婪->懒惰: .*? .+?
2. Math:
什么是: 专门封装数学计算所用常量,并提供数学计算所用API
何时: 只要数学计算时
特点: 不能new!
API:
1. 取整:
Math.ceil(num) 上取整: 只要超过,就取下一个整数
Math.floor(num) 下取整: 省略小数部分
Math.round(num) 四舍五入取整:
vs toFixed(d):
1. 小数位数: Math.round()只能取整,不能规定小数位数
toFixed(d)可取整,也可规定小数位数
2. 返回值: Math.round()返回number
toFixed(d)返回string
自定义round函数:
2. 乘方和开平方:
乘方: Math.pow(底数, 幂)
开平方: Math.sqrt(n)
3. 最大值和最小值:
Math.max(值1,值2,...);
Math.min(值1,值2,...);
问题: 不支持数组
解决: Math.max.apply(null,arr)
4. 随机数:
Math.random() 0<=r<1 随机小数
从min~max之间取随机整数:
Math.floor(Math.random()*(max-min+1)+min)
从0~n之间去随机:
Math.floor(Math.random()*(n+1));
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 date1=new Date(...);
var date2=new Date(date1);
4. 用毫秒数创建日期对象:
Date对象的原理:
Date对象中保存了一个巨大的毫秒数
起始时间为: 1970年1月1日0点至今的毫秒数
var date=new Date(ms);
两个日期对象可相减: 得到毫秒差
JS 9