正则表达式与预编译

本文介绍了正则表达式的创建与常用表达式,包括构造函数和字面量方式创建,以及如何使用[dDwWsS]等特殊字符进行匹配。还探讨了预编译的概念,解释了预编译的工作原理,涉及函数作用域和全局作用域中的变量初始化及提升机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

十、正则表达式

RegExp : RegularExpression

判断字符串

创建

1、构造函数

let re = new RegExp();
console.log(typeof re, re);//object /(?:)/

2、字面量

书写格式:

let re = / xxx /匹配模式;
//如
let re = / xxx /g;
let re = / xxx /img;
// g:global 全局查找
// i:insensit  不区分大小写
// m:multiline  多行匹配
let str="1a2b3c"
let re = / xxx /;
//以后常用
let result = re.test(str);//str是否满足re
console.log(result);//返回布尔值
//学习时用,返回满足条件的值
console.log(str.match(re));

常用表达式

[ ] 内是一位,里面只要满足一个就行,1-9表示从1到9的数字

{ } 内填位数,和[ ]连用,如[n]{2}表示连续两位为n才满足

( ) 内填条件

\d 纯数字

\D 非数字

\w 单词字符(即 a-z 或 A-Z 或 0-9 或 _ )

\W 非单词字符

\s 空白字符(空格、回车等)

\S 非空白字符

1、以n开头 ^[n]

2、贪婪匹配 {n,m}

先取满足m个数的内容,不够取m-1个数的内容,直到取到n个个数的内容

{n,} n到正无穷

//贪婪匹配
let str1 = `11122233344`;
let re = /[0-9]{1,5}/g;
console.log(str1.match(re));//[ '11122', '23334', '4' ]
re = /[0-9]{2,5}/g;
console.log(str1.match(re));//[ '11122', '23334' ]
//{n,} n到正无穷
str1=`11`;
re=/[0-9]{1,}/g;
console.log(str1.match(re));//[ '11' ]
re=/[0-9]{0,}/g;
console.log(str1.match(re));//[ '11', '' ]

3、n(?=m) 查找一个后面跟m的n;n(?!m) 查找一个后面不是m的n

let str = `1a2b3c4a`;
let re = /[0-9](?=a)/g;
console.log(str.match(re));//[ '1', '4' ]
re = /[0-9](?!a)/g;
console.log(str.match(re));//[ '2', '3' ]

手机号的规则

let tel = `13948507639`;
let re = /^[1][3-9][0-9]{9}$/g;
console.log(re.test(tel));//true
console.log(tel.match(re));//[ '13948507639' ]

十一、预编译

发生在执行的前一刻

【工作原理】

【函数作用域】

  1. 创建一个AO对象
  2. 形参和var声明的变量(不包含函数)(AO对象的属性名)
  3. 初始化属性名(即赋值undefined)
  4. 实参和形参相匹配
  5. 提升字面量声明的函数到函数第一行(函数名是AO的属性名,属性值是函数体

【全局作用域】

  1. 创建一个GO对象
  2. var声明的变量(不包含函数)(GO对象的属性名)
  3. 初始化属性名(即赋值undefined)
  4. 提升字面量声明的函数到第一行(函数名是GO的属性名,属性值是函数体

注:若函数中存在赋值未声明的变量,当函数被执行时,该变量才添加到GO

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值