JS核心part1

RegExp对象

什么是RegExp对象
专门在js程序中保存一条正则表达式的对象。
RegExp对象可将正则表达式语法翻译为js语言认识的语法,从而让正则表达式能够与js一起运行,实现功能。

何时
今后只要在js中要是用正则表达式,都用RegExp对象

如何创建正则表达式 2种

(1). 标准:
var reg=new RegExp("正则表达式","ig");
创建 RegExp类型的正则表达式对象
其中保存一条正则表达式

(2). 简写:
var reg=/正则表达式/ig
等效于
var reg=new RegExp("正则表达式","ig");

RegExp对象提供两个函数:
(1). 验证格式: 正则表达式.test()
(2). 查找敏感词: 正则表达式.exec()

(1). 验证格式: 正则表达式.test()
var 验证结果=正则表达式对象.test(字符串)
用正则表达式对象 验证 字符串是否符合正则表达式的格式要求
返回值:
验证通过,返回true;验证失败,返回false

坑:
test()只要在字符串中发现部分内容与正则匹配,就返回true!
但是,通常验证格式都要求必须从头到尾完整匹配

解决:
今后,只要验证格式,必须前加^,后加$
^表示字符串的开始位置
$表示字符串的结尾位置
^和$连用,表示从头到尾

坑:
/正则/真的可以换成new RegExp(“正则”)吗?
/^1[3-9]\d{9}$/ 正确
new RegExp(“^1[3-9]\d{9}$”) 不正确
原因
Js的字符串中\有特殊意义
比如\t表示一个制表符,\n表示回车换行
正则中\d的\与js字符串中的\冲突了
Js的字符串就会擅作主张删除\d前的\,变成d
new RegExp(“^1[3-9]\d{9}$”)->/^1[3-9]d{9}$/
解决: new RegExp(“^1[3-9]\\d{9}$”)
今后,只要正则中包含\,要转为new RegExp()时,都要用\\代替。
第一个\表示转义,就是阻止js解析后边的第二个\
第二个\是受第一个\保护的正则中的\

问题: [\u4e00-\u9fa5]不用\\也对
Js中刚好也有\u
正则中也有\u
而且js中和正则中的\u意思相同,都指一个字的unicode编号!
所以,[\u4e00-\u9fa5]不用\\也对

(2). 查找敏感词: 正则表达式.exec()
var 数组=正则表达式对象.exec(字符串)
用正则表达式对象去字符串中查找符合要求的敏感词的内容和位置

返回值: 如果找到敏感词,返回一个数组:
[
“0”: “一个敏感词的内容”,
“index”:这个敏感词的下标位置
]
如果没找到,返回null

本质: js中底层一切数组都是关联数组
---
所有下标,在底层其实都是字符串,都带””
即使索引数组的数字下标:0 1 2,在底层也带””
所以: 无论访问索引数组中的元素还是访问关联数组中的元素,标准写法都是:
数组[“下标名”]
---
比如
var arr=[“亮亮”,”楠楠”,”东东”]
console.log(arr[“1”])//楠楠

console.log(arr[1]) //楠楠

简写
---
简写:任何数组:
只要访问数字下标都可简写为:
数组[数字]
只要访问非数字的字符串下标可简写为:
数组.下标名
以上两种简写底层运行时,都会翻译为[”下标”]
问题
---
找到敏感词,可以正常读取结果数组中的元
没找到敏感词,试图读取结果数组中的元素会报错!
强调:
---
如果一个函数有可能返回null,必须先判断不是null,再使用!
问题: 默认exec()只能找第一个敏感词
---
exec()数组中只能放一个敏感词
无法同时放多个找到的敏感词
---
原因:正则表达式默认只找一个敏感词
---
解决:正则表达式后加g – global 全部
---
问题: 还是只能找一个
---
原因: exec()执行一次,注定只查找一个敏感词
但是: 在加了g的前提下,如果反复调用exec(),则exec()自动知道去找下一个敏感词
---
解决: g+循环
固定套路:
var reg=/正则/g;
do{
var arr=reg.exec(字符串);

}while(arr!=null);
因为无论是否包含敏感词,至少都要找一次才能知道,所以选择do while循环
因为只有本次找到了敏感词,才有必要继续找下一个,所以while的条件是: arr!=null

posted @ 2021-08-16 13:30  cansliang  阅读(51)  评论(0)    收藏  举报