2019web前端学习笔记——js高级(3)

二、 RegExp对象:

什么是: 保存一条正则表达式,并包含用正则表达式执行验证和查找功能 的对象
何时: 只要在js中使用正则表达式,都要先创建正则表达式对象,再使用正则。
如何:

1. 创建正则表达式对象:

2种:

(1)创建一个固定的正则表达式对象:

 var reg= /正则/ig
 问题: //之间不允许写js语句动态生成正则表达式

(2)正则表达式需要动态生成

 var reg=new RegExp("正则","ig")
 说明: 因为RegExp的第一个形参要求接受一个字符串格式的正则表达式。所以,我们有无数种办法,拼接出我们想要的任何字符串。
 比如: var str=kwords.join("|");
      "明月|白鹭"
	var reg=new RegExp(str);
      /明月|白鹭/

2. RegExp对象中包含两个函数:

(1)验证字符串是否符合格式要求

  var bool=reg.test(str)
            检查
   用正则表达式reg,检查str字符串是否符合格式要求
   返回值: true/false
  坑: test()默认只要能找到符合条件的部分内容,就返回true
  解决: 今后凡是验证,都必须前加^,同时后加$
  比如: //定义手机号的规则表达式reg
	var reg=/^1[3-9]\d{9}$/;
	//用规则表达式去验证手机号是否符合格式要求
	var result=reg.test(phone);
	//如果符合要求
	if(result==true){
       ... ...

(2)第四种查找: 查找所有敏感词的内容和位置

day03
如果看不见函数的执行过程,该怎么办: 在函数内添加console.log()输出函数的执行和参数,以及返回值
比如:

str=str.replace(/\b[a-z]/,function(kw){ 
  console.log("===内层函数被调用一次===");
  console.log("=====自动传入kw=${kw}");
  console.log("=====本次调用返回${kw.toUpperCase()}")
  return kw.toUpperCase() 
});

再比如:

var arr=[12,3,123,2,1,23];
arr.sort(function(a,b){
  console.log("***内层函数被调用了一次***");
  console.log(`*****本次用${a}和${b}做比较`);
  console.log(`*****本次调用返回${a-b}`)
  return a-b
})

提示: 在浏览器控制台中,按上下键可找回曾经执行过的代码。

console.log的输出问题: 
var arr=[12,3,123,2,1,23];
console.log(arr); //排序前输出数组的内容
arr.sort(function(a,b){ return a-b })
console.log(arr); //排序后再输出数组的内容

执行结果:
▶ arr
1
2
3
12
23
123
▶ arr
1
2
3
12
23
123
问题: 两次输出的结果都是排序后的。

原因:

console.log在首次输出对象时,仅是输出的对象引用地址。当我们点旁边的三角时,才自动去内存中找到对象现在的样子,展开对象。但此时,程序执行完了。
—— console.log()不是拍照!无法留住对象的瞬时内容

解决: 将对象的内容转为字符串才是拍照/打印
 console.log(String(arr)) [ 1, 2, 3, 12, 23, 123 ]
                ||      "1,2,3,12,23,123"
             arr.toString()
               转 字符串

查找关键词: 查找敏感词的内容和位置
var arr=reg.exec(str)
在字符串str中查找一个符合正则表达式reg要求的关键词
返回值: 跟str.match(reg)不加g,返回的值完全相同
arr [ 0: 关键词内容, index: 关键词的位置i ]

问题:

每次只返回一个敏感词的内容和位置

解决:

只要反复调用,reg.exec()会自动跳到下一个继续查找
找所有:用循环:

var reg=/小[\u4e00-\u9fa5]/g;
	do{//反复do
  		//查找敏感词
  		var arr=reg.exec(str);
  		//如果找到敏感词,才输出
  		if(arr!=null){
    		console.log("找到敏感词!");
    		console.log(arr);
  		}else{//否则(找不到),就退出循环
    		console.log("找不到了,就退出!")
    		break;
  		}
	}while(true);
//true 不使用循环条件控制退出,因为我也不知道循环几次!
//而是在循环体内根据条件,用break随时可能退出循环。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值