前端入门——正则表达式

本文详细介绍了前端开发中正则表达式的创建和使用,包括字面量和构造函数的创建方式,以及正则表达式的常用方法如test()、source、flags等。通过实例展示了正则在数值判定、颜色匹配和URL解析等场景的应用,帮助开发者掌握正则在前端开发中的实战技巧。
摘要由CSDN通过智能技术生成

1.正则表达式的创建和使用

创建正则表达式的两种方式

使用正则表达式字面量

const reg = /[a-z]\d+[a-z]/i;

优点:

  • 简单方便
  • 不需要考虑二次转义

 缺点:

  • 子内容无法重复使用
  • 过长的正则导致可读性差

使用 RegExp 构造函数

const alphabet = '[a-z]'; const reg = new RegExp(`${alphabet}\\d+${alphabet}`, 'i');

  • 子内容可以重复使用
  • 可以通过控制子内容的粒度提高可读性

缺点

  • 二次转义的问题非常容易导致 bug
  •  

正则表达式的常见用法

RegExp.prototype.test()

const reg = /[a-z]\d+[a-z]/i;

reg.test('a1a'); // true
reg.test('1a1'); // false
reg.test(Symbol('a1a')); // TypeError

 

要求输入字符串,如果输入的不是字符串类型,会尝试进行类型转换,转换失败会抛出 TypeError

输出

true 或者 false,表示匹配成功或失败

RegExp.prototype.source  和 RegExp.prototype.flags

 

const reg = /[a-z]\d+[a-z]/ig;

reg.source; // "[a-z]\d+[a-z]"
reg.flags; // "gi"

get RegExp.prototype.source

返回当前正则表达式的模式文本的字符串

get RegExp.prototype.flags

es2015新增,返回当前正则表达式的修饰符的字符串,会对修饰符按照字母升序进行排序(gimsuy

RegExp.prototype.exec() 和 String.prototype.match()

const reg = /[a-z]\d+[a-z]/i; reg.exec('a1a'); // ["a1a", index: 0, input: "a1a", groups: undefined] reg.exec('1a1'); // null 'a1a'.match(reg); // ["a1a", index: 0, input: "a1a", groups: undefined] '1a1'.match(reg); // null

RegExp.prototype.exec 要求输入字符串,遇到非字符串类型会尝试转换

String.prototype.match 要求输入正则表达式,遇到其它类型会先尝试转成字符串,再以字符串为 source 创建正则表达式

匹配成功,返回匹配结果

匹配失败,返回 null

RegExp.prototype.exec() 和 String.prototype.match()

const reg = /(a)/g; reg.exec('a1a'); // ["a", "a", index: 0, input: "a1a", groups: undefined] 'a1a'.match(reg); // ["a", "a"]

当正则表达式含有 g 修饰符时,RegExp.prototype.exec 每次只返回一个匹配结果,数据格式和不含 g 修饰符相同。

 

String.prototype.match 会返回所有的匹配结果,数据格式会变为字符串数组。

 

由于 String.prototype.match 返回的数据格式不固定,因此大多数情况都建议使用 RegExp.prototype.exec

RegExp.prototype.lastIndex

const reg = /(a)/g;
const str = 'a1a';

reg.lastIndex; // 0
reg.exec('a1a'); // ["a", "a", index: 0, input: "a1a", groups: undefined]
reg.lastIndex; // 1
reg.exec('a1a'); // ["a", "a", index: 2, input: "a1a", groups: undefined]
reg.lastIndex; // 3
reg.exec('a1a'); // null
reg.lastIndex; // 0

 

当前正则表达式最后一次匹配成功的结束位置(也就是下一次匹配的开始位置)

 

注意:lastIndex 不会自己重置,只有当上一次匹配失败才会重置为 0 ,因此,当你需要反复使用同一个正则表达式的时候,请在每次匹配新的字符串之前重置 lastIn

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值