正则表达式

1. 基础知识
  1. 正则表达式是用于匹配字符串组合模式(增删改查),在js中表达式也是对象
  2. 拥有宿主环境才能运行
2. 示例展示

两种不同的表现形式

 let hd = "dfsdfsd12121fccs";let nums = [...hd].filter(a => !Number.isNaN(parseInt(a)));console.log("字符串1", nums);console.log("字符串2", hd.match(/\d/g).join(" "))
3. 正则的创建
  1. 字面量创建
      let xx = "sasaeefe123";let a = "a";// console.log(/a/.test(xx));这样直接报错不会解析其中的这个变量//如果使用其中的变量console.log(eval(`/${a}/`).test(xx));//eval是直接将字符串转换成变量console.log(/a/.test(xx)); //true
  1. 对象创建
      //根据用户输入显示高亮let con = prompt("请输入要检测的内容,及规则");let reg = new RegExp(con, "g");let ww = document.getElementById("content");ww.innerHTML = ww.innerHTML.replace(reg, search => {return `<span style="color:red">${search}</span>`;console.log(search);});// \w==>表示是字母,数字,下划线 // \. ==>表示所有字符
4. 选择符的应用
let tel = "010-9999999";console.log(/aa|0/.test(tel));let tel = "010-9999999";console.log(/aa|0/.test(tel))//true;console.log(/010\-\d{7,8}|121\-\d{7,8}/.test(tel)) //trueconsole.log(/(010|121)\-\d{7,8}/.test(tel)) //true// 注:符号一般需要转译\-,{}表示在什么范围之间,
 //原子表[ ]与原子组()中的选择符let reg = /[12345]/let reg1 = /(12|34)/let hd = '12'console.log(hd.match(reg))console.log(hd.match(reg1))//原子表[ ]就是匹配中括号里的任意一个字符//原子组()表示是一个整体里面执行完成执行后面的
5. 转义应用
let pri = 12344.32;console.log(/\d+\.\d+/.test(pri));// . 由两层含义 1. 表示除换行外所有字符  2. 普通的 .  \d 表示0-9的数值
  • 但是在对象中表示不一致
let pri = 1213.22
let reg = new RegExp("\\d+\\.\\d+")
console.log(reg.test(pri));
// 因为在字符串中存在转义过程 \d=>d  \\d=>\d
  • 网址中简单校验
let url = 'https://www.xiaotian.com'
console.log(/https?:\/\/w+\.\w+\.\w+/.test(url))  // true
// ? =》 匹配前面的子表达式零次或一次 有或无
// 在正则中//只允许出现一对为边界符
6. 字符边界约束
<input type="text" name="user" /><div id="text"></div><script>document.querySelector('[name="user"]').addEventListener("blur", function(e) {let val = e.target.value;document.getElementById("text").innerText = /^\d$/.test(val)? "符合": "不符合";});</script>
// ^表示匹配字符串的开始   $匹配字符串的结束,忽略换行符
7. 元字符
// 1数值与空白
let val = '大汉:010-23424324,小虎:010-45324321'
console.log(val.match(/[^-\d:,\s]+/g))
//在原子表中的^==[^]表示除了
// 2 w与W元字符
let email= '1259885088@qq.com'
console.log(email.match(/^\d+@\w+\.\w+$/))
//
// 3 . 元字符let url1 = "https://www.baidu.com";   console.log(url1.match(/https?:\/\/\w+\.\w+\.\w+/));// 如果有空格 let url2 = "https:  //www.baidu.com";   console.log(url2.match(/https?:\s+\/\/\w+\.\w+\.\w+/));
// 4 . 所有的字符let val = `<span> 12was@_ 23</span>`;   console.log(val.match(/<span>[\d\D]+/<\/span>/));
;
元字符 说明 示例
\d 匹配任意一个数字 [0-9]
\D 匹配非任意数字 [^0-9]
\w 匹配字母数字下划线 [a-zA-Z0-9_]
\W 匹配非字母数字下划线 [^a-zA-Z0-9_]
\s 匹配空白字符 [\n\f\r\t\v]
\S 匹配非空白字符 [^\n\f\r\t\v]
. 匹配除换行符的任意字符 [^\n]
8. 模式修正符
// 1. i与g修饰符
//i表示不区分大小写字母的匹配  g表示全局
let val = "xIAoTian@163.com";console.log(val.match(/a/gi));
let changeVal = val.replace(/i/gi, "i");console.log(changeVal);
// 2. m修饰符表示用于将内容视为多行匹配,主要是对 ^和 $ 的修饰
let changeVal = val.match(/^\s*#\d+\s+.+\s+#$/gm).map((x) => {x = x.replace(/\s*#\d+\s*/, "").replace(/\s+#/, "");[name, value] = x.split(",");return { name, value };});
console.log(changeVal);
//3.   带有L属性的字符 正确处理四个字符的 UTF-16 编码let val = "daydayup,天天向上,加油u";console.log(val.match(/\p{L}/gu));console.log(val.match(/\p{P}/gu));et hd = `
张三:010-99999999,李四:020-88888888`;
let res = hd.match(/\p{sc=Han}+/gu);
console.log(res);
// 4. RegExp对象lastIndex 属性可以返回或者设置正则表达式开始匹配的位置
//必须结合 g 修饰符使用
//对 exec 方法有效
//匹配完成时,lastIndex 会被重置为0
let hd = `后盾人不断分享视频教程,后盾人网址是 houdunren.com`;
let reg = /后盾人(.{2})/g;
reg.lastIndex = 10; //从索引10开始搜索
console.log(reg.exec(hd));
console.log(reg.lastIndex);
// lastIndex 能够获取记录上次一的点
reg = /\p{sc=Han}/gu;
while ((res = reg.exec(hd))) {console.log(res[0]);
}
// 5. 从 regexp.lastIndex 开始匹配 不成功的时候就不匹配了
let hd = "udunren";
let reg = /u/g;
console.log(reg.exec(hd));
console.log(reg.lastIndex); //3
console.log(reg.exec(hd));
console.log(reg.lastIndex); //3
console.log(reg.exec(hd)); //null
console.log(reg.lastIndex); //0let hd = `后盾人QQ群:11111111,999999999,88888888
后盾人不断分享视频教程,后盾人网址是 houdunren.com`;let reg = /(\d+),?/y;
reg.lastIndex = 7;
while ((res = reg.exec(hd))) console.log(res[1]);

正则学习小记----1相关推荐

  1. js 正则学习小记之匹配字符串

    原文:js 正则学习小记之匹配字符串 今天看了第5章几个例子,有点收获,记录下来当作回顾也当作分享. 关于匹配字符串问题,有很多种类型,今天讨论 js 代码里的字符串匹配.(因为我想学完之后写个语法高 ...

  2. js 正则学习小记之左最长规则

    js 正则学习小记之左最长规则 原文:js 正则学习小记之左最长规则 昨天我在判断正则引擎用到的方法是用 /nfa|nfa not/ 去匹配 "nfa not",得到的结果是 'n ...

  3. 8086汇编学习小记-王爽汇编语言实验12

    8086汇编学习小记-王爽汇编语言实验12 0号中断处理程序,开始安装在0000:0200处的程序最后用死循环导致显示不出'divided error',改成直接退出就正常显示了.注意修改ss,sp之 ...

  4. python 正则学习笔记

    python 正则学习笔记 官方document #1.0 import re m=re.search('(?<=abc)def','cxabcdefgb')print(m.group(0))# ...

  5. 多项式快速插值学习小记

    今天终于抽空把这个综(du)合(liu)知识点学了,心力交瘁-- 多项式快速插值 给出 nnn 个点 (xi,yi)(x_i,y_i)(xi​,yi​) ,要求一个次数为 n−1n-1n−1 的多项式 ...

  6. 多项式的ln、exp、快速幂和开根学习小记

    不妨又学习了一下多项式的求ln.exp.快速幂和开根操作. 这些操作比之前的求逆更上了一层台阶,应用同样很广. 多项式求逆等知识在我的博客里有讲:多项式的求逆.取模和多点求值学习小记 多项式ln 给出 ...

  7. 积性函数与Dirichlet卷积 学习小记

    前言 首先感谢 XHM 大佬的悉心指导,我懂得了不少~. 链一下他关于这方面的见解.博客--XHM 的Dirichlet卷积 学习小记 一些定义 回归正题,这次我学习了一下狄利克雷卷积方面的知识. 先 ...

  8. python 温度 符号_【火马】Python学习小记01

    Python 学习小记 Life is short,you need Python! 写在前面 自从重新拾起2016年开始注册的公众号"火马编程",我就把TA当作了自己的一块&qu ...

  9. php实训总结00字,说明的比较细的php 正则学习实例

    说明的比较细的php 正则学习实例 "^The": 匹配以 "The"开头的字符串; "of despair$": 匹配以 "of ...

最新文章

  1. stateflow中向量与矩阵
  2. IOS-关闭(退)键盘事件--转
  3. GDB调试工具使用教程(博客)
  4. stm32时钟树_STM32中的时钟
  5. js 数组 实现 完全树_Flink实例(六十八):布隆过滤器(Bloom Filter)的原理和实现 - 秋华...
  6. Xcode中查看宏在预处理阶段的展开
  7. 2021年文件复制软件评测:FastCopy、TeraCopy、KillCopy、ExtremeCopy、Supercopier
  8. Caused by: java.sql.SQLException: Field 'id' doesn't have a default value
  9. java fps计算_帧率(FPS)计算的六种方法总结
  10. 双创项目_宫颈癌智能风险检测(4)
  11. Windows下模拟弱网(web、app)均可使用
  12. 支付宝签名php,支付宝快捷支付 PHP服务端签名
  13. 这个编辑器居然号称快如闪电!
  14. 西南地区首次大型“社区面基 Party”落幕,TiDB TechDay 下一站深圳见!
  15. 机器人学:操作臂运动学(Manipulator Forward Kinematics)
  16. CAD-Cass小结(4)——Cass、CAD对图像校正与等高线矢量化
  17. Django DRF 两种接口安全机制及其配置
  18. 摸鱼系列之idea摸鱼插件推荐
  19. macOS The bottle needs the Xcode CLT to be installed
  20. 多旋翼无人机控制器设计入门

热门文章

  1. Git 将某个提交合并到另一个分支
  2. 迷失的Borland
  3. 设计模式——Memento(备忘录)模式
  4. hibernate映射数据库提示not maped
  5. 东方联盟13句网络名言警句,你看懂了吗?
  6. Spark中的血缘关系与依赖
  7. 关系抽取公开数据集下载
  8. Python爬虫实战视频教程-李宁-专题视频课程
  9. 企业IM是什么,有什么使用优势?
  10. 阿里云2021财年营收超600亿,每年8亿美元大单被抢