JavaScrip-正则表达式

正则表达式

初识正则:

正则表达式是由一个字符序列形成的搜索模式
当你在文本中搜索数据时,你可以用搜索模式来描述你要查询的内容。
正则表达式可以是一个简单的字符,或一个更复杂的模式。
正则表达式可用于所有文本搜索和文本替换的操作

字面量创建正则表达式:

var reg = /正则表达式/修饰符
var reg = /hello/g

构造函数创建正则表达式:

var reg = new RegExp(‘正则表达式’,‘修饰符’);

正则表达式实例属性:

lastIndex:

没有设置全局(g)时始终为0.
设置了的话会移动到匹配字符的下一个位置,当没有可以匹配的字符后,下一轮exec返回null, test返回null。每次正则查找的起点都是lastIndex.

ignoreCase、global、multiline

判断正则表达式中是否有忽略大小写、全局匹配、多行匹配三个模式修饰符

var reg1 = /hello/igm;
console.log(reg1.ignoreCase); //true
console.log(reg1.global); //true
console.log(reg1.multiline);  //true

字符分类:

普通字符、特殊字符、模式修饰字符。
普通字符:数字、字母、下滑线、汉字、没有特殊意义的符号。
特殊符号:\ :把特殊字符转义为普通字符。

模式修饰字符:

i :ignoredCase ——不区分大小写。
g:gloal 全局匹配
m:multiline 多行匹配。

正则表达实例方法:

exec用来匹配字符串是否符合正则表达式的字符串
匹配成功:返回一个result数组[ “匹配内容”,“匹配内容所在索引”,"input"参数字符串,“groups:undefined”]
匹配失败:返回null

如果正则中有全局(g)则reg中会记录满足条件字符的索引位置,在下一个执行exec时会从lastIndex开始,没有的话,每次执行都会重置记录位置。

test用来测试正则表达hi是否正确匹配。
值:true / false

直接量字符:

\n ——换行符。 \t ——制表符 \f——换页符
\r ——回车符

字符集合:

[ ] 在框内查找任何字符。

// 使用字符集合 满足其中一个字符,就会满足校验条件

特别注意:匹配任意不在括号内的字符,可以在字符集合内用’-'来连接指定范围内的字符。
// [^] [^0-9]除了0-9之间的数字都可以//
[^a-z]// [^A-Z]都是同理。

// ^写在[]内代表取反,写在[]表示什么开

边界字符:

^ 匹配输入开始。表示匹配行首的文本(以谁开始)。如果多行(multiline)标志被设为 true,该字符也会匹配一个断行(line break)符后的开始处。

$ 匹配输入结尾。表示匹配行尾的文本(以谁结束)。如果多行(multiline)标志被设为 true,该字符也会匹配一个断行(line break)符的前的结尾处。

如果 ^和 $ 在一起,表示必须是精确匹配。// var reg4 = /1 / / / 意 思 相 当 于 a b c 中 只 要 有 一 个 都 能 为 t r u e 但 是 a b a c b c 都 为 f a l s e v a r r e g 5 = / [ a b c ] [ 0 − 9 ] / //意思相当于abc中只要有一个都能为true 但是ab ac bc都为false var reg5 = /^[abc][0-9] ///abctrueabacbcfalsevarreg5=/[abc][09]/
// 三选一 只有是a 或者是 b 或者是c 这三个字母才返回 true
var rg1 = /2 / ; / / 26 个 英 文 字 母 任 何 一 个 字 母 返 回 t r u e − 表 示 的 是 a 到 z 的 范 围 v a r r e g = / [ a − z ] /; //26个英文字母任何一个字母返回 true - 表示的是a 到z 的范围 var reg = /^[a-z] /;//26trueazvarreg=/[az]/
//取反 方括号内部加上 ^ 表示取反,只要包含方括号内的字符,都返回 false 。
var reg2 = /[a-zA-Z0-9]$/;

字符类:

\b 匹配一个零宽单词边界(zero-width word boundary),表示一个单词(而非字符)边界,也就是单词和空格之间的位置,或者字符(\w)与字符串开头或者结尾之间的位置。

\B 匹配一个零宽非单词边界(zero-width non-word boundary),与"\b"相反。

// \d->[0-9]表示\d 意味着[0-9]的内容
// \D->[^0-9]
// \w->[a-zA-Z0-9]
// \W->[^a-zA-Z0-9]
// \s 匹配任何Unicode空白字符,包括空格、制表符、换页符等,等效于[\f\t\n\r]
// \S 等效于**[^\f\t\n\r]**

数量词:

// {n,} 大于等于N次
// {n,m}大于等于n次,小于等于m次
// {n} 固定重复n次
// ?允许出现0次或1次
// + 允许出现1次或者多次
// *允许出现0次或者多次

一些特别的案例:

匹配QQ号:

不以数字0开头,只能由数字组成,5-11位的长度。

var reg = /^[1-9]\d{4,10}$/
console.log(reg.test('12343123161'))//true
匹配身份证号:
var reg =/^[1-9]\d{16}[xX\d]$/
log (reg.test('4123456123421324X')) // true

重复方式

1)贪婪模式:

尽可能多的匹配(首先取最多可匹配的数量为一组进行匹配),当匹配剩余的字符串,还会继续尝试新的匹配,直到匹配不到为止,为默认模式。

// 对字符串"123456789",匹配其中的数字3-6次:\d{3,6},先匹配数字出现6次的字符串(123456),然后再从剩余字符串(789)中匹配出现数字3次的情况,剩余字符若没有出现数字3次则停止匹配.

```javascript
var str = "123456789";
var reg = /\d{3,6}/g;
console.log(reg.exec(str)); //[ '123456', index: 0, input: '12345678', groups: undefined ]
console.log(reg.exec(str)); // [ '789', index: 6, input: '123456789', groups: undefined ]
console.log(reg.exec(str)); // null

##### 2)非贪婪模式:

尽可能少的匹配(每次取最少匹配的数量为一组进行匹配),直到匹配不到为止
**使用方法**:在量词后加上  **?**
// 对字符串"123456789",匹配其中的数字3-6次:\d{3,6},先匹配数字出现3次的字符串(123),然后再从剩余字符串(456789)中匹配出现数字3次的情况,剩余字符若没有出现数字3次则停止匹配.

```javascript
var str = "123456789";
var reg = /\d{3,6}?/g;
console.log(reg.exec(str)); //[ '123', index: 0, input: '123456789', groups: undefined ]
console.log(reg.exec(str)); // [ '456', index: 3, input: '123456789', groups: undefined ]
console.log(reg.exec(str)); // [ '789', index: 6, input: '123456789', groups: undefined ]

分组:
下面的正则表达式可以匹配’briupbriupbriup’
而另一种更优雅的写法是:
/briup{3}/ //用圆括号包裹的小整体成为分组
候选:
一个分组中可以有多个候选表达式:(用|分割)

var reg = /I Like (basketball|football|table tennis)/
console.log(reg.test('I Like basketball')); //true
console.log(reg.test('I Like football')); //true
console.log(reg.test('I Like table tennis')); //true

捕获与引用:
被正则表达式匹配(捕获)到的字符串会被暂存起来。其中,由分组捕获的串会从1开始编号,于是我们可以引用这些串:

var reg = /(\d{4})-(\d{2})-(\d{2})/

var date = '2021-08-29'

reg.test(date)

// 捕获之前要先test/exec


```javascript
console.log(RegExp.$1); //2021
console.log(RegExp.$2); //08
console.log(RegExp.$3); //29

``
$1引用了第一个被捕获的串,$2是第二个,依次类推

一些基础的正则表达式案例:
匹配11位有效的电话号码:

var reg = /^[1-9][3,4,5,7,8]\d{9}$/
 console.log(reg.test('15345678911'));//true

密码验证:
设置能以任何数字、不区分大小写字母以及!@#$%这几个特殊字符组成,并且大于六位的密码:

var reg = /(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[!@#%&]){6,}/;
console.log(reg.test('As3@31234'))//true


  1. abc ↩︎

  2. abc ↩︎

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值