《javascript正则表达式迷你书》笔记
字符匹配攻略
横向匹配——通过量词
{m,n} {m,} {m} ? + * 贪婪匹配 后面跟?号 惰性匹配纵向匹配——通过字符组
\d \D \w \W \s \S . \w表示[0-9a-zA-Z_] \W表示[^0-9a-zA-Z_]分支结构——通过管道符"|"
匹配模式也是惰性的
当前面的分支匹配上了这个位置的字符,后面的分支就不再尝试,整个匹配从这个位置往后继续进行
位置匹配攻略
匹配位置
- ^ $ \b \B (?=p) (?!p)
位置的特性
- 对于位置的理解,我们可以理解成空字符""
括号的作用
描述
- 强调括号内的正则是一个整体,提供了可供我们使用的分组,即提供了子表达式
分组引用
需配合使用实现环境的API来使用
str.match(reg) ——通过结果数组大于0的下标来获取 reg.exec(string) ——通过结果数组大于0的下标来获取 str.replace(regex,"$1") ——通过replace提供的$1,$2,$3...来获取捕获的分组
反向引用
在正则本身里引用分组的方式,通过\1,\2,\3...来引用分组内容
括号嵌套 ——从外到内,从左到右
\10 ——代表捕获的第10个分组
引用不存在的分组 ——代表"\数字"
分组后有量词 ——捕获最后的匹配
非捕获括号
不被捕获的分组形式
(?:字符)
(?:字符1|字符2|字符3..)
回溯法原理
没有回溯的匹配
- 一次匹配到位
有回溯的匹配
- 一次匹配不行,就"退一步",再进行匹配,循环往复
常见的回溯形式
贪婪量词
惰性量词
分支结构
正则表达式的拆分
编程语言都有操作符,正则表达式中的操作符则体现在结构中
结构
- 字符本身、字符组、量词、锚(位置)、分组、选择分支、反向引用
操作符的优先级
- 1——
2——(…)、(?:…)、(?=…)、(?!…)、[…]
3——{m}、{m,n}、{m,}、?、*、+
4——^、$、\元字符、一般字符
5——|
注意点
匹配字符串整体问题
- 如果存在位置锚,可以通过分组括号进行操作优先级的改变,比如^和$
量词连缀问题
- 如果存在量词连缀,可以通过分组括号分割,避免报错
元字符转义问题
- 需要转义的时候最好都转义
正则表达式的构建
平衡法则
匹配预期的字符串
不匹配非预期的字符串
可读性和可维护性
效率
构建前提
是否适合
是否必要
是否需要复杂的正则(可拆分)
准确性
- 确定匹配目标的所有模式规则,进行拆分,提取和分组
效率
(减少回溯)明确字符组,避免模糊匹配
(节省内存)如果不需要利用捕获组,应该使用非捕获型分组
(加快移位速度)独立出确定字符
(消除重复)提取分支公共部分
(减少回溯)控制分支的数量
正则表达式的编程
四种操作
验证
切分
提取
替换
相关api
String——search
String——split
String——match
String——replace
RegExp——test
RegExp——exec
注意点
search和match会把字符串转换为正则(匹配"."的时候需改写为"\.")
split中的正则分组会被包含进结果数组
换行修饰符m,针对的是^和$的位置
构造函数用法对于元字符和转义字符需要多再加一个斜杠""
test方法代表有部分匹配即可,因此整体匹配需要使用^和$进行控制
macth的调用,如果正则带g,则不会返回标准信息
exec的调用,始终都会返回标准信息
字符串的4个方法,每次匹配,都是从0开始的
正则实例的2个方法,每次匹配,都会修改lastIndex,遵从lastIndex
正则构造函数的静态属性基于所执行的最近一次正则操作而变化
正则构造函数的使用基于动态和需要变化的正则形式
《javascript正则表达式迷你书》笔记的更多相关文章
- HTML+CSS笔记 CSS笔记集合
HTML+CSS笔记 表格,超链接,图片,表单 涉及内容:表格,超链接,图片,表单 HTML+CSS笔记 CSS入门 涉及内容:简介,优势,语法说明,代码注释,CSS样式位置,不同样式优先级,选择器, ...
- CSS笔记--选择器
CSS笔记--选择器 mate的使用 <meta charset="UTF-8"> <title>Document</title> <me ...
- HTML+CSS笔记 CSS中级 一些小技巧
水平居中 行内元素的水平居中 </a></li> <li><a href="#">2</a></li> &l ...
- HTML+CSS笔记 CSS中级 颜色&长度值
颜色值 在网页中的颜色设置是非常重要,有字体颜色(color).背景颜色(background-color).边框颜色(border)等,设置颜色的方法也有很多种: 1.英文命令颜色 语法: p{co ...
- HTML+CSS笔记 CSS中级 缩写入门
盒子模型代码简写 回忆盒模型时外边距(margin).内边距(padding)和边框(border)设置上下左右四个方向的边距是按照顺时针方向设置的:上右下左. 语法: margin:10px 15p ...
- HTML+CSS笔记 CSS进阶再续
CSS的布局模型 清楚了CSS 盒模型的基本概念. 盒模型类型, 我们就可以深入探讨网页布局的基本模型了.布局模型与盒模型一样都是 CSS 最基本. 最核心的概念. 但布局模型是建立在盒模型基础之上, ...
- HTML+CSS笔记 CSS进阶续集
元素分类 在CSS中,html中的标签元素大体被分为三种不同的类型:块状元素.内联元素(又叫行内元素)和内联块状元素. 常用的块状元素有: <div>.<p>.<h1&g ...
- HTML+CSS笔记 CSS进阶
文字排版 字体 我们可以使用css样式为网页中的文字设置字体.字号.颜色等样式属性. 语法: body{font-family:"宋体";} 这里注意不要设置不常用的字体,因为如果 ...
- HTML+CSS笔记 CSS入门续集
继承 CSS的某些样式是具有继承性的,那么什么是继承呢?继承是一种规则,它允许样式不仅应用于某个特定html标签元素,而且应用于其后代(标签). 语法: p{color:red;} <p> ...
- HTML+CSS笔记 CSS入门
简介: </span>年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的<span>脚本解释程序</span>,作为ABC语言的一种继承. & ...
随机推荐
- logstash 安装插件multiline
一.安装multiline 在使用elk 传输记录 java 日志时,如下 一个java的报错 在elk中会按每一行 产生多条记录,不方便查阅 这里修改配置文件 使用 multiline 插件 ...
- 大文件切割(split)
split提供两种方式对文件进行切割: 根据行数切割,通过-l参数指定需要切割的行数 根据大小切割,通过-b参数指定需要切割的大小 1.1 根据行数切割 如下以一个3.4G大小的日志文件做切割演示,每 ...
- Zookeeper 应用实例
配置管理 程序总是需要配置的,如果程序分散部署在多台机器上,要逐个改变配置就变得困难.好吧,现在把这些配置全部放到zookeeper上去,保存在 Zookeeper 的某个目录节点中,然后所有相关应用 ...
- struts2动态调用+Servlet过滤器+struts2拦截器
周末真的是懒到心慌...... 本文是在完整s2sh项目基础上添加的,不太了解s2sh项目构建的朋友可以先参考一下这几篇文章: eclipse环境下基于tomcat-7.0.82构建struts2项目 ...
- net start MySQL57 MySQL57 服务正在启动 . MySQL57 服务无法启动。
造成这种情况的原因有很多,如果直接百度错误信息的话,不一定能很快解决问题,所以,出现这种情况,我们可以使用 mysqld --console 命令来查看报错信息,然后根据报错信息来百度,这样就很快定位 ...
- Django request对象与ORM简介
form表单 form表单默认是以get请求提交数据的 http://127.0.0.1:8000/login/?username=admin&password=123 action参数 1. ...
- 【python数据挖掘】爬取豆瓣影评数据
概述: 爬取豆瓣影评数据步骤: 1.获取网页请求 2.解析获取的网页 3.提速数据 4.保存文件 源代码: # 1.导入需要的库 import urllib.request from bs4 impo ...
- Centos7 防火墙开放端口,查看状态,查看开放端口
CentOS7 端口的开放关闭查看都是用防火墙来控制的,具体命令如下: 查看防火墙状态:(active (running) 即是开启状态) [root@WSS bin]# systemctl fire ...
- external IP 和 local IP 的区别
外部(external)和本地(local) IP地址都具有相同的用途,不同之处在于范围.整个Internet使用外部或公共IP地址来定位计算机系统和设备.专用网络内部使用本地或内部IP地址来定位与其 ...
- 使用elementui树形控件写项目小结
使用tree pagination serch table 实现功能 项目难点主要解析后台传递的代码,线性转树形,这儿加上一个大神的解析 https://blog.csdn.net/dandanzmc ...