正则表达式

什么是正则?

正则就是:定义字符串出现规则的表达式。

何时使用?

字符串的切割、替换、验证以及Python爬虫时。

JS中如何使用正则?

语法:var reg=/正则规则/;

一、正则的基础
1、限定符
?限定符
表示?前面的一个字符可以出现0次或1次。

r如:ab?c,意思是匹配出现0次b或者1次b的字符串。

*限定符
表示*前面的一个字符可以出现0次或者多次。

如:ab*c,表示可以匹配出现0次,或者多次c的字符串。

+ 限定符
表示+前面的一个字符可以出现1次或者多次。

如:ab+c,表示可以匹配出现一次或者多次b的字符串。

{}限定符
{}可以指定{}前的字符出现的次数。

传入一个参数就是必须出现多少次。
也可以传入一个范围,比如{2,6},就是允许{}前面的字符出现2-6次。如:ab{2,6}c
如果希望出现两次或者指定次数以上,可以省略第二个参数,但是逗号不可以省略。如:ab{2,}c

2、备选字符集
一个备选字符集,规定一位字符可能出现的情况。

何时使用?

只要关键字有多种情况。

如何使用:/[备选字符集]/

注意:

1)、一个中括号只能管一个字符;

2)、问题:正则只要匹配到满足规则的部分后,就不会管其余部分是否匹配。

解决:使用^匹配行首,$匹配行尾

特殊情况:

1)、如果备选字符集中有部分是unicode号/ASCII码是连续的,则可以用-省略中间部分:

/[0-9]/表示从0到9

/[a-z]/表示从小写a到小写z

/[A-Z]/表示从大写A到大写Z

2)、取反,除了xxx之外,其他都可以

[^xxx],表示除了xxx,都可以,范围太广,不推荐

3、匹配指定开头和指定结尾的字符串
^:以xxxxx开头

$:以xxxx结尾

如果同时使用了,前加^后加$,从头到尾完全匹配。只要是做验证,必须这么写。

其中,如果^用在了备选字符集[]中,表示除了备选字符集都可以,相当于取反。

4、预定义字符集
预定义字符集:提前定翼腭的一些常用的字符集

1)、一个数字:\d

2)、一个非数字:\D

3)、一位数字、字母、下划线:\w

4)、一位非数字、非字母、非下划线:\W

5)、一位空白字符:\s,包括空格、制表符、换行

6)、一位非空白字符:\S

7)、一位除了换行以外的任意字符:.(这里有个点)

建议:开发时优先使用预定义字符集,预定义字符集满足不了再用备选字符集补充。

5、选择(正则中的或运算)和分组
选择:可以在多个条件中选择—个。

规则1|规则2

分组:一个()表示一个分组,选择和分组—般来说都是需要搭配 | 使用的,即添加了子规则。

(规则1|规则2)

6、预判
在正式匹配正则表达式之前,先预读整个字符串,进行初步匹配,如果预判都未通过,则不再验证。也就是只有通过了预判,才会去验证是否符合程序员设定的真正规则。

公式:(?!这里写预判+$)

比如:

1、/^(?![0-9]+$)$/ : 不能全由数字组成,可能有大写字母、小写字母、汉字、特殊符号、日文、韩文...

2、/^(?![A-Za-z]+$)$/ : 不能全由大写组成,也不能全由小写组成,也不能由大写和小写的组合组成,可能有数字、汉字、特殊符号、日文、韩文...

使用场景:

一般用于密码强度验证、身份证、手机号验证等地方。

预判练习:
1)、4-6位密码,可以输入字母数字,但是必须要有一位大写和一位数字的组合

var reg=/^(?![0-9a-z]+$)(?![A-Za-z]+$)[0-9A-Za-z]{4,6}$/
2)、4-6位密码,可以输入字母数字,但是必须要是3者的组合

var reg=/^(?![0-9a-z]+$)(?![A-Za-z]+$)(?![0-9A-Z]+$)[a-zA-Z0-9]{4,6}$/;
7、后缀g和i
在JS中,可以添加后缀来表示某一范围。

如:

var reg=/[a-z]/g
g后缀表示的是全局(global)匹配。

var reg=/[a-z]/i
i后缀表示忽略大小写。

 

8、贪婪与懒惰匹配
正则默认是贪婪匹配,也就是会尽可能多的去匹配字符串。

如:

<span><b>This is a simple text</b></span>
使用的正则:

<.+>,但这样会把上面的所有字符都匹配上,但我们的本意是只匹配标签。

解决:<.+?>,把贪婪匹配改成懒惰匹配,就只匹配标签了。

二、字符串中支持正则的方法
在字符串的方法中,支持正则的方法有:split和replace。

1、切割
var arr=str.split("固定切割符"/RegExp)

当你的字符串中使用不同的字符来分隔字符时,就可以使用正则进行切割,返回数组。

2、替换(难点)
1)、基础替换法:

str=str.replace(/正则表达式/g,"新内容")

注意:替换时,不要加^和$,我们不需要完全匹配,只需要找到关键字替换而已

问题:替换的东西,只能替换成固定的东西

2)、高级替换法:

str=str.replace(/正则表达式/g,function(key,index,str){

console.log(key) // 正则匹配到的内容

console.log(index) //当前次正则匹配到的关键字的下标

console.log(str) //原文本身

return key.length;

})
通过传入回调函数,获取正则当前次匹配到的信息(匹配到多少个就会执行多少次),可以判断长度,进而进行不同的替换。

3)、格式化:如果替换时,正则中带有分组,即(),那么回调函数中会有更多的参数

var str="500234200005289999"
var reg=/\d{6}(\d{4})(\d{2})(\d{2})\d{4}/;
str=str.replace(reg,function(key,a,b,c,index,str){
console.log(key) // 正则匹配到的内容
console.log(a) //第一个分组匹配到的内容
console.log(b) //第二个分组匹配到的内容
console.log(c) //第三个分组匹配到的内容
...
console.log(index) //当前次正则匹配到的关键字的下标
console.log(str) //原文本身

return a+"年"+b+"月"+c+"日"
})
有几个分组,就会在高级替换的基础上多上几个参数,多出来的参数位置,在key之后,index之前。

原文链接:https://blog.csdn.net/txl2498459886/article/details/126669189

posted @   灌篮如库里  阅读(28)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示