2016-08-31-day09 am
1. RegExp:
- 是什么:封装一条正则表达式,并提供用正则执行验证和查找的方法的对象
- 何时使用:
检索: 即检索每个关键词内容,又检索位置
验证: 检查字符串是否符合正则表达式的要求 - 如何使用:
创建正则对象的2种方法:
1). 只用正则直接量: var reg=/正则/ig;
何时使用: 如果正则表达式是固定的,不需要动态生成。
特殊符号: 直接量中的 /都要转为 \/
/<li><\/li>/
2). 用new:
var reg=new RegExp("正则","ig");
何时使用: 如果正则表达式不是固定的,需要动态生成
特殊符号:
\ " '都要转义为: \\ \" \'
以下是一个例子
var str="you can you up";
var reg=/you/ig;
console.log(str.match(reg));
var names=["明明","静静","明月"];
var reg=new RegExp(
names.join("|"),"ig"
);
var str="明明喜欢我,却不告诉我"+
"别理我,我想静静"+
"静静是谁?"+
"你先告诉我明明是谁?"+
"床前明月光"+
"日照香炉生紫烟";
console.log(str.match(reg));
-
RegExp API:
检索: 即检索每个关键词的内容,又检索每个关键词的位置
var arr=reg.exec(str)
找出str中当前位置后和reg匹配的下一个关键词。
原理:
reg.lastIndex: 标识下次开始查找的位置
默认0
exec: 每执行一次,做3件事:
1. 从reg.lastIndex位置开始找下一个关键词
2. 返回:
[0:"关键词",1:"$1",2:"$2",...]
.index-> 返回本次找到的关键词位置
强调: 如果找不到,返回null
3. 自动修改reg.lastIndex为index+关键词的字符个数(跳过当前关键词)
var str =
"明明喜欢我,却不告诉我" +
"别理我,我想静静" +
"静静是谁?" +
"你先告诉我明明是谁?";
var reg = /明明|静静/g;
//.lastIndex
var arr = null;
while ((arr = reg.exec(str)) != null) {
//arr:[0: 关键词, index: i]
console.log(
"在位置"+arr.index+"发现敏感词"+arr[0],
"下次从"+reg.lastIndex+"开始找"
);
}
正则:
贪婪模式: 默认正则表达式都会匹配尽量长的符合规则的字符串。
懒惰模式: 仅匹配最短的符合规则的字符串
贪婪改懒惰? .*? .+?
验证: 检查一个字符串是否符合正则表达式的要求。
var bool=reg.test(str);
检查str是否符合reg的要求
如果符合,返回true,否则返回false
问题:默认test方法只要部分匹配就返回true。
解决:验证都要前加^,后加$,要求从头到尾必须完整匹配。
var pwd=prompt("输入密码:(6位数字)");
//^(?![A-Za-z]+$)(?![a-z0-9]+$)[A-Za-z0-9]{6,8}$
if(new RegExp("^\\d{6}$").test(pwd)){
document.write("验证通过");
}else{
alert("密码格式不正确");
}
2. Math: 专门封装数学计算使用的常量,并提供执行数学计算的API的对象
强调: 不能 new!直接使用 Math.xxx
Math API:
1.取整:
- 上取整: 只要超过,就取下一个整数
Math.ceil(n); - 下取整: 只要超过,就去掉小数部分
Math.floor(n); - 四舍五入取整: Math.round(n)
vs n.toFixed(d)
Math.round只能取整,返回的是number
而n.toFixed(d),可指定小数位数,但返回的是string
2.乘方和开平方:
Math.pow(底数,幂) : 计算乘方
比如: 10的2次方: Math.pow(10,2);
Math.sqrt(n):求n的平方根
网友评论