正则表达式【学习笔记】(从零如何快速了解正则表达式)

概要

本次笔记记录自己 如何学习 正则表达式 及其应用。

我先对自己提问:

什么是正则表达式?

有什么用?拿来做什么?

明确目的后 开始搜索相关知识进行学习。        

概念

正则表达式(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 

到这里基本就能看懂符号的意义了

剩下就是继续做题 重固学习知识点

  • 31
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值