概要
本次笔记记录自己 如何学习 正则表达式 及其应用。
我先对自己提问:
什么是正则表达式?
有什么用?拿来做什么?
明确目的后 开始搜索相关知识进行学习。
概念
正则表达式(Regular Expression,常简写为regex或regexp)是用于描述字符串搜索和匹配模式的一种工具.
总结了下
意思就是查找、替换、提取·
所以这玩意儿作用 用来提取自己想要部分的
关键词: 作用 -> 精确选取
好吧 简单明白用来干嘛 就该了解怎么用
我的学习想法是 直接从实例入手 由结果逆推方法
所以去随便找一个关于正则表达式的实例 然后进行逆推了解
这里使用JavaScript语言举实例:
用正则表达式 从 a1223bc456d 中提取 数字 的表达式
var a = 'a1223bc456d'
先解析一下题目:提取数字
数字有 1233 456 这些数字都要提取出来
代码书写为
var regex = /[0-9]+/g
var result = a.match(regex)
结果为:
那么上述代码部分都分别代表着什么?
开始进行逐个分析
首先是JavaScript中的正则表达式原理
以 / 作为 开始和结束 正则表达式的模式定义
也就是方法的标志词 我要进行正则表达式的引用我就要用到 / 符号
然后在 / / 里放置要匹配的内容
g 代表修饰符号
在JavaScript的正则表达式中,修饰符是用来修改正则表达式的行为的
(除g的其他修饰符:)
意味着全局匹配 区别在于是否进行第一个匹配后再继续匹配
有 g修饰符 代表全局继续匹配 没有则进行第一次匹配后不继续匹配
var regex = /[0-9]+/g
没有加g的修饰符 结果为
(怎么自动生成水印了呢?查了下 个人中心-内容管理-博客设置中取消掉)
可见结果只匹配了一次 没有再次匹配将后面的456匹配出来
所以目前理解了前端JavaScript中的正则基础引用模式
以 / 符号 作为正则开始与结束的模式匹配
那么 // 内的 [0-9]+ 代表什么?
搜了一下方法原理:
方括号[] 代表定义字符集 表示字符范围
0-9 表示 0到9的数字
所以 [0-9] 代表 从数字0到数字9的范围 也就是匹配数字
那么 /[0-9]/ 就代表匹配一次数字
/[0-9]/g 同理代表全局匹配多次数字
代码运行区别:
——>
不加g修饰符 匹配一次成功即止 判定a不是数字 然后往下找 判定1是数字 OK 停止
匹配一次 匹配到 好 停了 后面不找了
——>
加g修饰符 全局匹配直到全部匹配完 判定a不是数字 往下 判定1是数字 继续往下 判定2是数字
一直到最后一个字符 d判断不是数字截止 将所有数字都匹配出来 丢到一个数组中
匹配多次 匹配到 继续匹 匹到全部找完
知道了方括号[]是指定一个筛选范围
那么同理 [a-z] 就代表26个小写字母 也就是字母范围
同理可得 [0-9a-zA-Z] 就代表 数字和大小写字母的范围
那么是否符号也能同样筛选呢?
比如筛选一些字符?寻找限制ing
——>
运行结果没有
发现符号一类的属于特殊字符
所谓特殊字符,就是一些有特殊含义的字符
意味着符号一类有特殊的用法 导致在这里直接想引用符号产生冲突?
类似 我定义了a = 1 再用a就不能是字母a了?
所以继续查询资料
若要匹配这些特殊字符,必须首先使字符"转义",即,将反斜杠字符\ 放在它们前面
所以
转义 就相当于 声明 ?
我声明要用的是 字母a 不是 a = 1这个定义含义 ?
——>
这样使用了转义字符\ 就可以实现特殊字符的匹配了
那转义字符\本身呢?再使用一个反斜杠转义自身?
好家伙 字符串里面使用\ 语法还会报错
意味着 \自身代表转义 要引用\这个符号 还得自身转义一下
——>
成功
除了字母数字外的字符需要进行转义
去了下菜鸟教程查了下特殊字符还有哪些
查询引用:
教程里上下瞄了一眼
除了 特殊字符 还有 限定符 定位符
还有贪婪模式 非贪婪
好麻烦 为什么要学这个?QAQ
好吧 继续 最开始的
var regex = /[0-9]+/g
这个+号是一个特殊字符:
匹配前面的子表达式一次或多次
啥意思?代码运行一下
——>
懂了
意思是有多匹多 最少匹一
还有其他同等的特殊字符:
*号:
匹配前面的子表达式零次或多次
——>
匹配到了空字符
说明
特殊字符 加号和※号区别
一个最少得匹配出一个出来 没有就不匹配
一个匹配不出来也没关系 没有就给你返个空字符
?号:
匹配前面的子表达式零次或一次
——>
问号 没匹配到就返回空 匹配到就给你返回一次
好 到这里 找的这道题就解决了
实例的小总结下:
// 正则开始和结束
[]表范围
0-9表0到9的范围区间
+号是个特殊字符 表匹配一次或多次 有多匹多
g是一个修饰符
所以 再回过来多看一眼
/[0-9]+/g = 正则表达式引用 全局匹配 范围为0到9的数字 且匹配一次或多次
小题MVP结算界面:
收获 正则的引用方式 * 1
收获 修饰符 的应用 * 1
收获 方括号[] 的应用 * 1
收获 转义字符反斜杠\ 的应用 * 1
收获 + ? * 三个特殊字符 的应用 * 1
以第一题所获得知识点 继续做大做强
继续从特殊字符入手
.号:
匹配除换行符(\n、\r)之外的任何单个字符
其中 什么是换行符?
\n:换行符
字符串的结束,并且通常会在字符串的下一个行开始处创建一个新的行
\r:回车字符
用于告诉打印机或显示器将打印头或光标移动到行的开头,而不是在当前位置的新行上继续打印
点 . 符号的应用:
——>
^ 符号原理与应用:
匹配输入字符串的开始位置,除非在方括号表达式中使用,当该符号在方括号表达式中使用时,表示不接受该方括号表达式中的字符集合。属于定位符
就表示 从 开头开始匹配嘛 后面接匹配什么
——>
从开头匹配一个数字
——>
从开头匹配一或多个数字
$ 符号原理与应用:
匹配输入字符串的结尾位置 属于定位符
就匹配结尾的字符嘛
——>
匹配结尾的字母
——>
明白了 ^ 与 $ 两个定位符的原理
可以根据原理筛选一个固定后缀的文件类型
例如:
我想条件筛选出-study.log的日志文件
. 字符 匹配任意一个字符
* 匹配零或多个
\. 转义点这个符号
这样就能在多行内匹配到想要的日志文件
那么运用到限定符同样就能更精准的匹配想要的文件了
——>
再简单去了解一下其他的字符
\d:匹配任意一个阿拉伯数字(0 到 9)=> [0-9]
\w:匹配字母、数字、下划线 => [A-Za-z0-9_]
[\s\S]: 匹配所有 \s 是匹配所有空白符,包括换行,\S 非空白符,不包括换行。
{m,n}: 匹配至少m次 最大n次
{0,1} 匹配0或1次 相当于特殊符号? /a{0,1}/ = /a?/
——>
关于贪婪与非贪婪
贪婪模式和非贪婪模式是量词(如
*
、+
、?
等)的两种不同的匹配行为
意思就是 一个往多的匹配去 一个往少的匹配去
关键就在于量词上面嘛
——>
尽可能匹配多次数的字符 就是贪婪模式嘛
——>
加个问号 尽可能匹配少次数的字符 就是非贪婪模式嘛
+ 符号: 匹配一次或多次
? 符号: 匹配零次或一次
两者结合 +? 变成了非贪婪模式 匹配少的部分
OK
到这里基本就能看懂符号的意义了
剩下就是继续做题 重固学习知识点