正则表达式 function 作用域 基本包装类型
复习
正则表达式
- test
- exec
var guize = /box/ig;
var content = 'where is my box';
guize.test|exec(content);
方法 | 说明 |
---|---|
match(规则) | 返回匹配到的内容 如果匹配 不到 返回null |
replace(规则,替换后的内容) | 将规则中的字符串 替换成指定的字符串 |
search(规则) | 返回字符串中 目标字符串开始出现的位置 |
split(规则) | 按照指定的规则拆分 a@b@c@d |
var guize = /box/ig;
var content = 'this is Box that is Box';
console.log(guize.test(content));
console.log(content.match(guize));// Box Box
console.log(content.search(guize));//8 返回Box 开始的位置
console.log(content.replace(guize,'test'));//this is test that is test 将 Box 替换为 test
var guize = / /ig; //按照空格拆分
var arr = content.split(guize);//this,is,Box,that,is,Box
console.log(arr.length);//6
元字符 | 说明 |
---|---|
. | 除了换行符之外的任意字符 |
[a-z0-9A-Z] | a-z0-9A-Z在这个范围内 任意字符 |
\d | 匹配数字 |
\D | 匹配非数字 类似于[^0-9] |
\w | 匹配字母数字下划线 |
\W | 匹配非字母数字下划线 |
\s | 匹配空白字符 空格 换行 制表符 |
\S | 匹配非空白字符 |
\b | 匹配空格字符 |
\n | 匹配换行字符 |
\0 | 匹配null字符 |
锚字符 /^/
字符 | 说明 |
---|---|
^ | 行首匹配 |
$ | 行尾匹配 |
重复字符 o 代表字符 google
字符 | 说明 |
---|---|
x? | 0个或者1个x |
x* | 0个或者任意多个x |
x+ | 至少一个x |
(xyz)+ | 把xyz看作是一个整体 至少一个整体 |
x{a,b} | 最少a个 最多b个 |
分组
符号 | 说明 |
---|---|
$1 | 匹配第一个分组 |
$2 | 匹配第2个分组 |
$3 | 匹配第3个分组 |
console.log(RegExp.$1);
var guize = /6(.*)6 8(.*)8 9(.*)9/;
var content = 'this is 6mytest6 8haha8 9adf9';
console.log(content.match(guize));
//66mytest6 8haha8 9adf9,mytest,haha,adf
console.log(RegExp.$3);
//输出第一个分组中的内容 adf
var guize = /^([a-z]+)\s([0-9]{4})$/i;
var str = 'whenis 2002';
console.log(guize.exec(str)[0]); //whenis 2002
console.log(guize.exec(str)[1]);//whenis
console.log(guize.exec(str)[2]);//2002
替代字符
baidu|so.com|sogou.com|google.com
贪婪模式 惰性模式 ? 区别 贪婪加上? 就是惰性
贪婪模式 | 惰性模式 |
---|---|
x * 0个任意多个x | *? |
x? 0个或者一个 | ?? |
| +? |
{n} 严格 n位 | {n}? |
{n,} 至少n位 | {n,}? |
{n,m} 至少 n 最多 m | {m,n}? |
var guize = /[a-z]+?/;//?开启惰性模式
var str = 'abcdefghijk';
console.log(str.replace(guize,'xxx')); //xxxbcdefghijk
如果 取消惰性 模式
返回 xxx 也就说 所有的字符串 全部替换成了 xxx
function 类型 函数也叫做 方法
- 函数的声明方式
- 函数可以作为值
- 函数的内部属性
- 函数的属性和方法
函数的声明方式
function box(num1,num2){
return num1+num2;
}
var box = function(num1,num2){
return num1+num2;
}
var box = new Function('num1','num2','return num1+num2');了解 这个不推荐
函数可以作为值
function sum(num){
return num+10;
}
function box(hanshuming,num){
return hanshuming(num);
//变成 sum(10);
}
alert(box(sum,10)); //20
函数的内部属性 arguments.callee
function kangbazi1806(num1){
if(num1 <=1){
return 1;
}else{
return num1*kangbazi1806(num1-1);
}
//5*kangbazi(4)
//5*4*kangbazi(3)
}
alert(kangbazi1806(6));
以上是一个阶乘 自己调用自己
如果 kangbazi1806改了 函数内部所有调用自己的地方都要跟着改名
能不能有个方法 只需要改一次 里边自动跟着修改
arguments.callee 即可
function niuten(num1){
if(num1 <=1){
return 1;
}else{
return num1*arguments.callee(num1-1);
}
}
alert(niuten(6));
this
var color = 'red';
alert(color);
alert(window.color);
alert(this.color); //此时this 代表window
var color = 'red'; //全局
var box = {
color:'orange', //局部
user:function(){
alert(this.color); //这个代表局部
}
}
box.user();//代表是局部
alert(this.color);//这个代表全局
全局不能调用局部变量 但是局部可以调用全局的变量 现在有个需求 想调用局部的变量
这个时候 需要扩展作用域 call() 重点
var color = '闷骚蓝'; //全局
var test = {
color:'明骚红', //局部
}
function useColor(){
alert(this.color);
}
useColor(); //闷骚蓝 全局 局部调用不了
useColor.call(this); //此时这个this代表全局
useColor.call(window); //此时作用域在 全局
useColor.call(test); //此时作用域在test
//通过call 扩展了test 的作用域
//明骚红
function sum(num1,num2){ 理解
return num1+num2; //它才是真正的加减运算
}
function box(num1,num2){ //box 冒充 sum 完成 运算
return sum.call(this,num1,num2);
//此时this 代表 sum
}
alert(box(20,30));
apply 理解
function sum(num1,num2,num3){
return num1+num2+num3; //它才是真正的加减运算
}
function box(num1,num2,num3){
return sum.apply(this,arguments); //arguments 是 不管 sum多少个参数 在box 通通给你传递过去
}
alert(box(20,30,50));
超时调用 setTimeout() 超时调用 执行一次
setTimeout(函数,1000); 毫秒为单位 1000毫秒=1秒
function box(){
console.log('我可以称呼你为您么?这样你永远在我心上');
}
setTimeout(box,5000); //5秒钟之后运行box函数
var test = setTimeout(function(){ //test就是标识
console.log('种花没意思,咱们一起种草莓');
},6000);
clearTimeout(test); //取消超时调用 参数是标识
间歇调用 setInterval(box,1000); //每隔一秒执行一次
function box(){
console.log('你不珍惜我,过了这个村在下一个村子等你');
}
setInterval(box,1000); //每隔一秒执行一次
var test = setInterval(box,1000);
clearInterval(test); //取消间歇调用
var box = setInterval(function(){
console.log('每到双十一泽林喜欢晒支付宝流水,有一天问身边的女同事,你的支付宝流水多么');
},1000);
clearInterval(box);
作业:
1.跑马灯
python1806谁与争锋
数组能够讲第一个
2.表单验证 弄明白