正则表达式基础学习之个人学习总结

简介目录

在这里插入图片描述
正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等;
详细的教程可以参考完整讲解----菜鸟教程

普通字符

除了特殊字符以外的字符都是普通字符。比如 中文;
也就是 a-z 、A-Z 、 0-9、所有标点符号、空格,中文等;
常见的普通字符正则表达式:
案例:匹配一段字符里面的‘张三’

let reg = new RegExp(/张三/)
'张三居然还不会写正则表达式'.match(reg)
=> ["张三", index: 0, input: "张三居然还不会写正则表达式", groups: undefined]

特殊字符(元字符)

以下涉及到的名词解释:

元字符
元字符表示正则表达式功能的最小单位,如 * ^ $ \d 等等;
匹配元字符
要匹配元字符的时候,需要使用 转义符 \ 对元字符转义。例如:要匹配 . ,使用 '\. ’

基本元字符

包括没有显式指定为元字符的所有可打印和不可打印字符。这包括所有大写和小写字母、所有数字、所有标点符号和一些其他符号。

  1. .
    解释:匹配除换行符(\n、\r)之外的任何单个字符,相等于 [^\n\r]。要匹配 . ,使用 '\. ';
    案例:常用作匹配任意字符的场景
let reg = new RegExp(/./g)
// 匹配任意字符
'abcd'.match(reg)
// ["a", "b", "c", "d"]
  1. |
    解释: 指明两项之间的一个选择。类似于逻辑或。
    案例:
let reg = new RegExp(/a|b/g)
// 匹配a或者b
'abcd'.match(reg)
// ["a", "b"]
  1. []
    解释:
    [] 符号内部非内容被称作字符集合 ,也可做字符范围类表达;匹配 []中的所有字符。例如 [abcd] 匹配字符串 “hello word” 中所有的 a b c d 字母。
 注意:
 大多数特殊字符在中括号表达式内出现时失去它们的意义

案列:

let reg = new RegExp(/[ab]/g)
// 匹配a,b字符
'abcd'.match(reg)
// ["a", "b"]
  • [^]
    解释:和 [] 相反;匹配 除了[…] 中的所有字符,例如 [^abcd] 匹配字符串 “hello word” 中除 a b c d 字母的所有字母。
    案例:
let reg = new RegExp(/[^ab]/g)
// 匹配 除a,b以外的字符
'abcd'.match(reg)
// ["c", "d"]
  • -
    解释:定义一个区间;
    如: [A-Z] 匹配所有大写字母,[a-z] 表示所有小写字母。
    常见的表达式: [a-z],[0-9], [A-Z] 等。
    案例:
let reg = new RegExp(/[a-z]/g)
// 匹配 a-z之间的字符
'abcd'.match(reg)
//  ["a", "b", "c", "d"]等同于 /[.]/g
  • \ 对下一个字符进行转义 如 ( .)

特殊元字符

特殊字符细数一下,还是有点多的,所以呢,就只对部分使用场景比较多的进行介绍了。其他的特殊字符可以去全部元字符介绍详细阅读一下哈。

  • \d 匹配任意数字字符。匹配一个数字字符。等价于 [0-9]
  • \D \d 的反义。匹配一个非数字字符。等价于 [^0-9]。
  • \s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。
  • \S \s 反义 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]
  • \w 匹配字母、数字、下划线。等价于’[A-Za-z0-9_]’。常用于密码的字符匹配校验
  • \W \w 的反义。匹配非字母、数字、下划线。等价于 ‘[^A-Za-z0-9_]’。

位置元字符

定位符用来描述字符串或单词的边界,^ 和 $ 分别指字符串的开始与结束。

  • ^ 匹配输入字符串的开始位置
    除非在[]方括号表达式中使用,当该符号在[]中使用时,表示不接受该方括号表达式中的字符集合。要匹配 ^ 字符本身,请使用 ^。
  • $ 匹配输入字符串的结尾位置

数量限定元字符

  • * 号【*前面的字符 】【可以不出现】,也可以出现一次或者多次(0次、或1次、或多次)。 匹配的字符出现次数 >=0
实例:o出现的次数 >0
 let reg = new RegExp(/hello*b/)
'hello1111'.match(reg)
=> null

'hellb'.match(reg)
=> ["hellb"]

'hellob'.match(reg)
=> ["hellob"]

等价于 {0,}

  • + 号代表【前面的字符】必须至少出现一次(1次或多次)。 匹配的字符出现次数 >=1
实例: o出现的次数 >=1
 let reg = new RegExp(/hello+b/)
'hello1111'.match(reg)
=> null

'hellb'.match(reg)
=> null

'hellob'.match(reg)
=> ["hellob", index: 0, input: "hellob", groups: undefined]

等价于 {1,}

  • ? 问号代表【前面的字符 】最多只可以出现一次(0次、或1次) 匹配的字符出现次数 <=1
实例:o出现的次数 <=1
 let reg = new RegExp(/hello+b/)
'hello1111'.match(reg)
=> null

'hellob'.match(reg)
=> ["hellob"]

'hellb'.match(reg)
=> ["hellb"]

'helloob'.match(reg_3)
=> null

? 等价于 {0,1}
!!!!注意:
当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的

  • {n} n 是一个非负整数。匹配 【前面的表达式】确定的 n 次。 匹配的字符出现次数 =n
    实例:/o{2}/ 不能匹配 “Bob” 中的 ‘o’,但是能匹配 “food” 中的两个 o
  • {n,} n 是一个非负整数。 【前面的表达式】至少匹配的 n 次。 匹配的字符出现次数 >=n
    实例:/o{2,}/
    ‘o{2,}’ 不能匹配 “Bob” 中的 ‘o’,但能匹配 “foooood” 中的所有 o。‘o{1,}’ 等价于 ‘o+’。‘o{0,}’ 则等价于 ‘o*’
  • {n.m} m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。匹配 【前面的表达式】确定的 n-m 次。n<= 匹配的字符出现次数 <=m
    实例:/o{1,2}/ 能匹配 “Bob” 中的 ‘o’,也能匹配 “food” 中的两个 o
    注意: 请注意在逗号和两个数之间不能有空格
    贪婪模式: 尽可能多的匹配
    * 和 + ,{n,}限定符都是贪婪的,因为它们会尽可能多的匹配文字,只有在它们的后面加上一个 ? 就可以实现非贪婪或最小匹配。

回溯引用和前后查找

主要有?=,?<=,?!,?<! ;因为概念理解起来比较绕。所以就用案例说明他们的区别。案例在菜鸟教程上可查阅。菜鸟教程案例入口

  • 零宽正向先行断言 (?=)
    ?= exp1(?=exp2):查找 exp2 前面的 exp1。
    案例:hello(?=[\d+]) 匹配数字前面的 hello;匹配后面是数字的 hello
    在这里插入图片描述
  • 零宽负向先行断言 (?<=)
    (?<=exp2)exp1:查找 exp2 后面的 exp1。
    案例:(?<=[\d+])hello 匹配数字后面是的hello;也是匹配前面是数字的hello
    在这里插入图片描述
    -零宽正向先后行断言 (?!)
    exp1(?!exp2):查找后面不是 exp2 的 exp1。
    案例:hello(?![\d+]) 匹配后面不是数字的hello
    在这里插入图片描述
  • 零宽负向后行断言 (?<!)
    (?<!exp2)exp1:查找前面不是 exp2 的 exp1。
    案例: (?<![\d+])hello 匹配前面不是数字的hello
    在这里插入图片描述
    注意: ES2018才支持 ?!,?<!特性。

String 涉及到正则表达式的方法

String.prototype.match()

检索返回一个字符串匹配正则表达式子的结果。
唯一参数:
一个正则表达式对象,如果传入一个非正则表达式对象,则会隐式地使用 new RegExp(obj) 将其转换为一个 RegExp 。如果你没有给出任何参数并直接使用match() 方法 ,你将会得到一 个包含空字符串的 Array[""]
返回值:返回一个数组。

如果正则表达式不包含g标志,str.match() 将返回与 RegExp.exec(). 相同的结果。
match() 和 exec() 的区别 :
如果正则表达式使用g标志,则将返回与完整正则表达式匹配的所有结果,但不会返回捕获组。

String.prototype.replace()

字符串的替换方法,替换为指定字符。第一个参数是一个RegExp 对象或者其字面量。该正则所匹配的内容会被第二个参数的返回值替换掉。
返回一个部分或全部匹配由替代模式所取代的新的字符串。
注意:
该方法并不改变调用它的字符串本身,而只是返回一个新的替换后的字符串。
在进行全局的搜索替换时,正则表达式需包含 g 标志。

String.prototype.search()

执行正则表达式和 String 对象之间的一个搜索匹配。
参数:
一个正则表达式(regular expression)对象
如果传入一个非正则表达式对象 regexp,则会使用 new RegExp(regexp) 隐式地将其转换为正则表达式对象
返回值:
如果匹配成功,则 search() 返回正则表达式在字符串中首次匹配项的索引;否则,返回 -1

String.prototype.split()

方法使用指定的分隔符字符串将一个String对象分割成子字符串数组,以一个指定的分割字串来决定每个拆分的位置。
参数可以是一个字符串或是正则表达式。
返回值:
返回源字符串以分隔符出现位置分隔而成的一个 Array

RegExp 原型方法

RegExp.prototype.exec()

在一个指定字符串中执行一个搜索匹配。返回一个结果数组或 null。
返回字符串的匹配成功的捕获组,相比str.match()的返回结果,exec 返回结果更详细。
返回结果捕获组 的附加属性 :

  • groups: 一个捕获组数组 或 undefined(如果没有定义命名捕获组)。
  • index: 匹配的结果的开始位置
  • input: 搜索的字符串.

RegExp.prototype.test()

执行一个检索,用来查看正则表达式与指定的字符串是否匹配。返回 truefalse

当你想要知道一个正则表达式是否与指定的字符串匹配时,就可以使用 test()(类似于 String.prototype.search() 方法),差别在于test返回一个布尔值,而 search 返回索引(如果找到)或者-1(如果没找到)

最后

以上就是正则表达式全部内容。很多同志都是看见正则表达式就绕道走的,在实际的开发中正则表达式使用场景不是很多。也是一项必备技能。建议大家收藏学习哦

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值