正则表达式

定义

Regular Expression 使用单个字符串来描述、匹配一系列符合某个语法规则的字符串。简单来说,就是按照某种规则去匹配符合条件的字符串。

工具

图形工具:https://regexper.com/

表现形式

字面量

var reg = /\bis\b/g;

构造函数

var reg = new RegExp('\\bis\\b', 'g');

修饰符

  1. g: global 全文搜索,不添加,搜索到第一个匹配停止
  2. i: ignore case 忽略大小写, 默认大小写敏感
  3. m: multiple lines 多行搜索

元字符

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

原义文本字符

例如: abc就是代表abc

元字符

元字符是在正则表达式中由特殊含义的非字母字符
例如: * + ? $ ^ . | \ () {} []

  1. \t: 水平制表符
  2. \v: 垂直制表符
  3. \n: 换行符
  4. \o: 空字符
  5. \r: 回车符
  6. \f: 换页符
  7. \cX: 与X对应的控制字符(ctrl+x)

字符类

使用元字符[] 来构建一个简单的类。

所谓类是指符合某些特性的对象,一个泛指,而不是特质某个字符。

例如:[abc] 把字符a 或 b 或c归为一类, 表达式可以匹配这类的字符这里写图片描述

字符类取反

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

反响类是指不属于某类的内容

例如: [^abc] 表示 不是字符a 或b 或c 的内容.这里写图片描述

范围类

正则表达式提供了范围类

可以使用[a-z] 来连接两个字符表示 从a到z的任意字符

这是个闭区间,也就是包含a和z的本身这里写图片描述

预定义类

正则表达式提供预定类来匹配常见的字符类。
这里写图片描述

边界

  1. ^ : 以 xxx开始
  2. $: 以xxx结束
  3. \b: 单词边界
  4. \B: 非单词边界

量词

  1. ? : 出现零次或一次(最多出现一次)
  2. +: 出现一次或多次(至少出现一次)
  3. * : 出现零次或多次(任意次)
  4. {n}: 出现n次
  5. {n, m}: 出现n到m次
  6. {n,}: 至少出现n次

贪婪模式

'12345678'.replace(/\d{3,6}/g, 'X');
// 输出的结果:X78

尽可能的多匹配,知道出现不能匹配的为止

非贪婪模式

让正则表达式尽可能少的匹配,就是说一旦成功匹配不再继续尝试,就是非贪婪模式。

做法: 在量词后面加上? 即可

'12345678'.replace(/\d{3, 6}?/g, 'X');
// 结果输出:XX78

分组

场景:匹配字符串Byron连续出现3次的场景。

使用() 可以达到分组的功能, 使量词作用于分组。

(Byron){3} 这里写图片描述

错误示例: Byron{3} 这里写图片描述

使用 | 可以达到或的效果

Byr(on|Ca)sper 这里写图片描述

Byron|Casper 这里写图片描述

反向引用

示例:

2015-12-25 => 12/25/2015

'2015-12-25'.replace(/(\d{4})-(\d{2})-(\d{2})/g, '$2/$3/$1');

上例中,使用$1, $2, $3 来捕获分组的结果,分别代表第一组,第二组,第三组。

忽略分组

不希望捕获某些分组,只需要在分组内加上?: 即可

(?:Byron).(ok) 这里写图片描述

前瞻

正则表达式从文本头部想尾部开始解析,文本尾部方向,称为‘前’。

前瞻就是在正则表达式匹配到规则的时候,向前检查是否符合断言。

后顾/后瞻方向相反。

JavaScript不支持后顾。

符合和不符合特定断言称为肯定/正想匹配和否定/负向匹配。

这里写图片描述

'a2*3'.replace(/\w(?=\d)/g, 'X');
// 输出结果为:Xa*3

test() 与 exec()

RegExp.prototype.test(str)

用于测试字符串中是否存在匹配正则表达式模式的字符串,返回值为true 或者 false

RegExp.prototype.exec(str)

使用正则表达式模式对字符串进行搜索,并将更新全局RegExp对象的属性以反应匹配结果, 如果没有匹配的文本则返回null, 否则返回一个数组。

相关方法

String.prototype.search(reg)

search() 方法用于检索字符串中指定的子字符串,或检索与正则表达式匹配的子字符串。

方法返回第一个匹配结果 index, 查找不到返回-1

search() 不支持全局匹配,忽略标志g, 并且总是从字符串的开始进行检索

这里写图片描述

String.prototype.match(reg)

match() 方法将检索字符串,以找到一个或多个与regexp匹配的文本。

regexp 是否具有标志g 对结果影响很大。

如果regexp 没有标志 g, match() 方法就只在字符串中执行一次匹配。

如果没有找到任何匹配的文本,将返回null, 否则返回一个数组,其中存放了与它找到的匹配文本有关的信息。

var reg1 = /\d(\w)\d/;
var reg2 = /\d(\w)\d/g;
var str = '$1a2b3c4d5e';
var rest = str.match(reg1);
var rest2 = str.match(reg2);
console.log(rest);
console.log(rest.index + '==' + rest.lastIndex);
console.log(rest2);
console.log(rest2.index+'===='+rest2.lastIndex);

// 输出的信息分别为
// ["1a2", "a", index: 1, input: "$1a2b3c4d5e"]
// 1==undefined
// ["1a2", "3c4"]
// undefined====undefined

String.prototype.split(str)

一般熟知的简单的split() 是分割字符串、截取字符串

在一些负载的分割情况下我们可以使用正则表达式解决。'a1b2c3d'.split(/\d/);

String.prototype.replace(str | reg, replace | replaceStr | function)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值