首页 > 其他分享 >正则表达式

正则表达式

时间:2023-05-23 10:35:15浏览次数:28  
标签:字符 匹配 正则表达式 字符集 正则 str console

什么是正则?

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

何时使用?

字符串的切割、替换、验证以及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

标签:字符,匹配,正则表达式,字符集,正则,str,console
From: https://www.cnblogs.com/yangjialong/p/17422548.html

相关文章

  • 正则表达式
    1.\将下一个字符标记符、或一个向后引用、或一个八进制转义符。例如,“\\n”匹配\n。“\n”匹配换行符。序列“\\”匹配“\”而“\(”则匹配“(”。即相当于多种编程语言中都有的“转义字符”的概念。2^匹配输入字行首。如果设置了RegExp对象的Multiline属性,^也匹配“......
  • Linux三剑客(grep/awk/sed)及正则表达式
    Linux给人的印象是黑乎乎的神秘窗口,文本操作和数据处理似乎没有Windows窗口界面直观方便。其实Linux有自己的独特的法宝,称之为三剑客:grep,awk和sed。你可以用这三件法宝很方便的处理数据:查找,分段,修改。正则表达式要想对文本和数据进行操作,一定离不开正则表达式,本文首......
  • 正则表达式的意义
    https://www.bilibili.com/video/BV1CS4y1C7ZY?p=60&spm_id_from=pageDriver&vd_source=29cb78abf51970a872824d0975a7bff5处理大量的字符串处理文字通过特殊符号的辅助,可以让linux管理员快速过滤、替换、处理所需要的字符串、文本,让工作高效。通常Linux运维工作,都是面临大......
  • jquery validate实现表单验证 (正则表达式)
    jqueryvalidate实现表单验证(正则表达式)于2016-08-0320:01:24发布分类专栏:原创javascript文章标签:javascriptjquery正则表达式表单验证validate版权原创同时被2个专栏收录37篇文章0订阅订阅专栏javascript4篇文章0订阅订阅专栏一、目的为......
  • 正则表达式集合
    正则表达式集合校验数字校验字符的表达式单例特殊需求表达式钱的输入格式其他表达式校验数字1、数字:^[0-9]*$2、n位的数字:^\d{n}$3、至少n位的数字:^\d{n,}$4、m-n位的数字:^\d{m,n}$5、零和非零开头的数字:^(0|[1-9][0-9]*)$6、非零开头的最多带两位小数的数字:^([1-9][0-9]*)*(.[0-9]......
  • Openresty 学习笔记(二)Nginx Lua 正则表达式相关API
    ngx.re.match语法: captures,err=ngx.re.match(subject,regex,options?,ctx?,res_table?)环境: init_worker_by_lua*,set_by_lua*,rewrite_by_lua*,access_by_lua*,content_by_lua*,header_filter_by_lua*,body_filter_by_lua*,log_by_lua*,ngx.timer.*,balancer......
  • 我让gpt写了一段正则表达式代码,可是运行报错,可以帮忙看看哪里出了问题?
    大家好,我是皮皮。一、前言前几天在Python最强王者群【HZL】问了一个Python正则表达式的问题,这里拿出来给大家分享下。截图如下图所示:单独跑的这一行,跑出了下图这个。这个报错是你提取了4列,应该赋值给4列,而不应该是1列。二、实现过程这里【大锤子】给了一个思路,你可以把......
  • Nginx的正则表达式
    ^~     标识符后面跟一个字符串。Nginx将在这个字符串匹配后停止进行正则表达式的匹配(location指令中正则表达式的匹配的结果优先使用),如:location^~/images/,你希望对/images/这个目录进行一些特别的操作,如增加expires头,防盗链等,但是你又想把除了这个目录的图片外的所有图......
  • 正则表达式 基础
    Tips:字符串方法match()返回根据正则表达式匹配到的结果1.常用符号/链接标志1.1开头结尾标志^以...开头$以...结尾constreg1=/^\d///以数字开头constreg2=/^[a-z]///以小写字母开头constreg3=/\d$///以数字结尾constreg4=/[a-z]$///以小写字母......
  • 正则表达式,re模块
    正则表达式,一种独立的规则和语言,主要和字符串打交道爬虫,从一大段文字中获取符合条件的内容表单验证,检测一个字符串是否完全符合规则,先通过正则去判断是否符合规则,符合规则再去请求字符组匹配所有数字[0-9]匹配所有小写字母[a-z]匹配所有大写字母[A-Z]匹配所有......