正则表达式,RegExp对象,Sting对象,Math对象 笔记---JavaScript--

正则表达式
what:规定一个字符串中字符出现规律的表达式
when:只要使用一种规则,模糊匹配关键词时
how:
1.最简单的正则就是关键词原文
2.字符集:规定字符串中某一位字符,备选字符列表
when:只有一位字符,有多重选择字符时
how: [备选字符列表]

注意:
1、每个字符集只能匹配一位字符
2、每个字符集 至少匹配一次

简写:
1.如果备选字符集列列表是连续的,可以用-省略中间字符

				ex:
				一位数字:[0123456789]    [0-9]
				一位小写字母:[a-z]
				一位大写字母:[A-Z]
				一位字母:[A-Za-z]
				一位汉字:[\u4e00-\u9fa5]
		特殊:除了xxx以外[^xxx]
					^必须写在[^开头]
			常用字符集的简写:预定义字符集  固定4个
				\w  一位字母数字或_   ==>[a-zA-Z0-9_]
				\d  一位数字         ==>[0-9]   digtal---数位
				\s  一位空字符:一切看不见的字符
				. 任意字符

量词:专门规定一个位字符集出现次数的规则,量词需放在字符的后面
1.有明确数量边界:

字符集{min,max}   规定字符集最少出现min次,最多出现max次
字符集{min,}       规定最少min次,多了不限制
字符集{n}		  规定必须出现n次

2.没有 明确数量边界

					字符集?    可有可无,最多一次
					字符集*     可有可无,多了不限
					字符集+     {1,}至少一次,多了不限制
					注意:仅修饰相邻的前一个字符集

选择和分组
分组:把多个规则组成的正则表达式用(括起来)
选择:就是“或者”

				//作业:  手机号、邮箱  
      	思路:			
				(\+86|0086)?   +86或0086  可有可无,最多一次
				\s*             空字符,可有可无,多了不限制
				1
				[34578]       在 3,4,5,7,8中挑一个
				\d{9}          9位数字
                
				(\+86|0086)?\s*1[34578]\d{9}  手机号码

				邮箱    y@qq.com.cn
				数字 字母 或者_     一次以上
				@
				字母或数字           两位以上
				(. 和  字母或者数字   2-3位 )        1-2次
				\w+@[a-zA-Z0-9]{2,}(.[a-zA-Z0-9]{2,3}){1,2}

RegExp对象
1、what:封装一条正则表达式,提供了使用正则表达式进行查找和验证的API
2.when 查找关键词的第四种情况:即查内容,又查位置
利用正则表达式进行验证
3.how:
创建 直接量的创建 已知规则

		var reg=/no/g;     //所有与的/在正则中都要加上\/才能转义为/
		console.log(typeof reg);//object  对象

动态创建正则

		var reg1=new RegExp(/正则/,"gi");
		var str = "床前明月光,一行白鹭上青天,日照香炉生紫烟,飞流直下三千尺";
		var names=['明月','白鹭','飞流','紫烟',"青天"];
		var nameReg = new RegExp(names.join("|"),"g");
		var kws = str.match(nameReg);
		console.log(kws);

2.找到所有关键词内容,又找到每个关键词的位置!
var arr = reg.exec(带查找的完整字符串)

返回值:本次找到的一个关键词及位置
arr[0]: 关键词的内容 如果正则中有分组 arr[n]:自动保存在第n个分组匹配的子内容
arr[index]: 当前关键词位置 – >等同于 arr.index 如果没有找到返回null
每次查找后,都将reg.lastIndex属性(下一次开始位置)修改为当前index+关键词长度,相当于跳过了当前关键词继续向后找

		var  str = "那天,我去她家,我说:我草 你家真大。她说一起去郊游,我草草的收拾了一下,她说:我去去就来";
		var reg =/我[去草]{1,2}/g;
		var arr;
		//固定用法:找所有关键词
		//反复:找str中的关键词,只要不等于null
		while((arr=reg.exec(str))!=null){
			console.log(arr);
			console.log(
				`在位置${arr["index"]}
				发现
				敏感词${arr[0]}`
				);
		}

3.检查字符串是是否完全满足正则表达式的要求!
var bool = reg.test(待检测字符串)
只要是验证,reg中必须前加^ 后加$ 要求冲头到位,都必须完整匹配,返回值位布尔类型
判断字符串中是否包含符合正则的敏感词

String对象
.toString() 方法返回字符串。

4.var i = str.search(/正则/i)
** i表示忽略大小写 在str中找到第一个符合
正则表达式要求的关键字的位置**
返回值:找到了返回关键词的下标,如果没有找到返回-1

		var str=prompt("正在输入消息.....);
		var i = str.search(/(微|w(ei)?)\s*(信|xin|x)/);
		console.log(i==-1?"发送成功":"发现敏感词,不能发送!");*/
		var str="No zuo no die No can no say";
		var i =str.search(/n/i);
		console.log(i);
		
indexOf("value") 方法可返回某个指定的字符串值在字符串中首次出现的位置。		
  1. 使用正则表达式查询指定的一类关键词
    var arr = str.match(/正则/ig) 查找str中所有符合正则表达式要求的关键词,保存在一个数组中返回
    默认只找第一个,找到所有需要必须加上g
    返回值:所有敏感词组成数组,没有找到返回null

     	var arr = str.match(/we/gi);
     	console.log(String(arr));
    

强调:如果一个api有可能返回null,就必须先做判断,不等null时在使用

6.查找关键字
.indexof : 默认从0开始,仅能查找一次出现的位置
var r=str.indexof(“关键字”,i)
i为从下标为i的位置查找下一个关键字
返回值:关键词具体的位置下标,没找到返回-1

7.替换:将字符串中所有敏感(符合正则表达式规则)词替换为新内容
基本替换 str = str.replace(/正则/ig,‘替换值’); 替换以后返回一个新的字符串

str = "青葡萄,紫葡萄,青葡萄没紫葡萄紫,吃葡萄不吐葡萄皮,不吃葡萄倒吐葡萄皮,若要不吃葡萄非吐皮,就得先吃葡萄不吐皮";	
	str2 = str.replace(/[吃]?葡萄/g,
		function(kw){
		return kw.length==2?"**":"***";}*/
		kw => kw.length==2?"**":"***")//es6中的箭头函数

衍生操作:删除,将找到的字符串替换成空字符

	str = str.replace(/葡萄/g,"");

格式化:将原字符串的关键词按照指定格式重新组合
step1: 用正则将元字符串中的内容分组
step2: 用replace按新格式重新组合各个分组的内容

			ex:"19950415"--->1995年04月15日
				birth.replace(/(\d{4})(\d{2})(\d{2})/g,"$1年$2月$3日")

其中$n可以获得第n个()分组对应的子字符组
回调函数:用你给定的条件,自动执行
console.log(str2);

var kwr = str.match(/no/gi);
	var newStr = str.replace(/no/gi,'bu');
	console.log(newStr);
	console.log('共替换'+kwr.length+"处");
	//yes
	var reg=/yes/gi;
	kwr=str.match(reg);
	var unStr=str.replace(reg, "***");
	console.log(unStr);
	console.log(kwr==null?"没有找到匹配的关键词":"替换"+kwr.length+"处")
	//高级用法:根据不同的关键词,动态替换不同的新值
	str = str.replace(/正则/gi,function(kw){
			 kw本次找到的关键词
			 return 根据kw计算出新的替换前一个
	}) 

8.切割:将源字符串,按照指定字符,分割为多个子字符串
var substr=str.split(/正则/)

	var mail = "elyssa@qq.cn";
	var result=mail.split(/@/);    // ["elyssa ", "qq.cn"]

9.截取:提取字符串的某个部分,并以新的字符串返回被提取的部分。
slice()
str.slice(start,end)
start为开始截取元素的下标(如果只有开始下标,没有截取部分末尾下标,将默认为后面的元素全部截取)
end为末尾截取元素的下标(截取数组,不包括下标为end的元素)
返回值:一个新的字符串。包括字符串 stringObject 从 start 开始(包括 start)到 end 结束(不包括 end)为止的所有字符。

10 .抽取
.substr() 的参数指定的是子串的开始位置和长度
str.substr(start,length)
substr() 的参数指定的是子串的开始位置和长度,因此它可以替代 substring() 和 slice() 来使用但用法不同,length为截取的长度。**
返回值:一个新的字符串,包含从 str的 start(包括 start 所指的字符) 处开始的 length 个字符。如果没有指定 length,那么返回的字符串包含从 start 到 str的结尾的字符。

Math对象 专门封装数据计算所用的常量,并且提供数学计算所用的API
只要数学结算
特点 不能 用new!创建 直接使用对象名.函数
console.log(Math.PI);
1.取整

		Math.ceil(num);          上取整
		var num=3.45;
		console.log(Math.ceil(num));//4
		Math.floor(num);下取整
		console.log(Math.floor(num));//3
		Math.round(num); 四舍五入 只能取整,不能规定小数位数,得到的是number类型   
								 toFixed(d)可取整,省略参数就是取整,也可规定小数位数 返回string类型
		console.log(Math.round(num));
		console.log(num.toFixed(2))

2.乘方 和平方

		 Math.pow(底数,幂)  乘方
		 console.log(Math.pow(2,8));//256
		  Math.sqrt(n) 开平方
		 console.log(Math.sqrt(9));

3.随机数
Math.random(); 返回一个0-1之间的小数
从min~max 之间取随机整数

		 Math.floor((Math.random()*(max-min+1)+min));

从0~n之间取随机数

		  Math.floor(Math.random()*(n+1));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值