ES5&ES6 正则表达式学习笔记

以前看过一两遍,长时间不用就又忘了,学习js知识的时候总是把正则表达式部分略过。在工作中发现用到正则表达式的地方越来越多。开启正则表达式学习。

1、RegEep对象

javascript 通过内置对象RegExp支持正则表达式。 实例化RegExp对象的两种方法:

  • 字面量
  • 构造函数 例子 var reg = /\bis\b/g; var reg1 = new RegExp('\bis\b', 'g')

因为构造函数的模式参数都是字符串,所以所有的元字符都需要双重转译

tips: 如果写完一个正则表达式,想看下写的是否正确可以通过https://regexper.com 查看

2、 正则表达式修饰符

修饰符含义
g全局搜索
i忽略大小写
m多行搜索
y粘连(与g同时使用,es6新增)

3、元字符

正则表达式由两种基本字符类组成:

  • 原义文本字符 (例如 abc 123)
  • 元字符 (元字符是在正则表达式中的有特殊含义的非字母字符)
元字符含义
.
$
^
|
\
()
{}
[]

4、 字符类

我们可以使用元字符[]来构建一个简单的类(类是指符合某些特性的对象,一个泛指而不是特指某个字符

表达式[abc]把字符a或b或c归为一类,表达式可以匹配这类字符

5、 字符类取反

使用元字符^创建 反向类/负向类

表达式[^abc]表示不是字符a或b或c的内容

6、 范围类

使用字符类匹配数字 [0123456789]

我们可以使用[0-9]来连接两个字符表示从1到9

在[]组成的类内部是可以连写的[a-zA-Z],表示小写a-z和大写A-Z

7、 预定义类及边界

正则表达式提供预定义类来匹配常见的字符类

7.1 预定义类
字符等价类含义
.[^\r\n]除了回车符和换行符之外的所有字符
\d[0-9]数字字符
\D[^0-9]非数字字符
\s[\t\n\xOB\f\r]空白符
\S[^\t\n\xOB\f\r]非空白字符
\w[a-zA-Z_0-9]单词字符(字母、数字下划线)
\W[^a-zA-Z_0-9]非单词字符
7.2 边界
字符等价类
^以xxx开始
$以xxx结束
\b单词边界
\B非单词边界

8、 量词

例如我们希望匹配一个连续出现10数字的字符串 \d\d\d\d\d\d\d\d\d\d (无法忍受啦)

字符含义
?出现0次或一次(最多出现一次)
+出现一次或者多次 (至少出现一次)
出现0次或者多次(任意次)
{n}出现n次
{n,m}出现n到m次
{n,}至少出现n

9 贪婪模式与非贪婪模式

顾名思义:贪婪模式就是尽可能多的去匹配,非贪婪模式就是最少匹配

例如:\d{3,6} 123456789 结果回匹配出 123456

非贪婪模式,在量词后加上?即可

10、分组

例如:hello连续出现五次,我们可能会写 hello{5},这样写,只是后面的o出现5次,并不是我们预期

使用()可以达到分组的功能,使量词作用于分组
(hello){3}即可满足我们需求

正则表达式用| 可以达到或的效果 例如 hello|world

反向引用

可以用$来捕获到分组

忽略分组

不想捕获某些分组,只需在分组内加上?:就可以 (?:hello).(ok)

11、前瞻

正则表达式从文本头部向尾部开始解析,文本尾部方向,称为‘前’ 前瞻就是在正则表达式匹配到规则的时候,向前检查是否符合断言 后顾/后瞻 方向相反(js不支持)

名称正则
正向前瞻exp(?=assert)
负向前瞻exp(?!assert)

12、js对象属性

  • global: 是否全文搜索,默认false
  • ignoreCase: 是否大小写敏感,默认false
  • multiline: 多行搜索,默认值false
  • lastIndex: 是当前表达式匹配内容的最后一个字符的下一个位置
  • source: 正则表达式的文本字符串

13、test和exec方法

test
  • 用于测试字符串参数中是否存在匹配正则表达式模式的字符串
  • 如果存在则返回true,否则返回false const reg1 = /\w/ reg1.test('a') -> true reg1.test('b') -> true reg1.test('c') -> true const reg2 = /\w/g reg2.test('a') -> true reg2.test('b') -> false reg2.test('b') -> true 因为lastIndex属性在g情况下,匹配完,lastIndex会返回匹配字符下一个字符的位置
exec方法
  • 使用正则表达式模式对字符串执行搜索,并将更新全局RegExp对象的属性以反映匹配结果
  • 如果没有匹配的文本返回null,否则返回一个结果数组。
  • exec() 方法还返回两个属性
    1. index声明匹配文本的第一个字符的位置
    2. input存放被检索的字符串string

14、字符串对象方法

search方法
match 方法
split 方法
replace 方法

match方法 replace(str,replaceStr) replace(reg,replaceStr) replace(reg,function) 在非全局下match,和exec功能一样,在全局下只是返回一个匹配数组,也没有分组信息了。 function参数含义 function会在每次匹配替换的时候调用,有四个参数

1、匹配字符串
2、正则表达式分组内容,没有分组则没有该参数
3、匹配项在字符串中的index
4、原字符串
复制代码

转载于:https://juejin.im/post/5afc3156f265da0b736dd6a5

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值