正则表达式

本文详细介绍了正则表达式,包括其定义、特点、创建方式和使用方法。深入讲解了量词符、括号符的用法,以及捕获和非捕获的概念。同时,讨论了贪婪匹配与懒惰匹配的区别,并阐述了正则表达式的优先级。通过实例解析,帮助读者掌握正则表达式的核心技巧。

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

一、正则表达式

1、什么是正则表达式

(1)是描述字符串语法结构的规则

(2)是用于匹配字符串中字符串组合的模式

(3)是一个对象

2、特点

(1)非常灵活

(2)逻辑性非常强

(3)以非常简单的方式对字符串进行复杂的控制

3、创建正则表达式

(1)使用字面量

var 变量名 = / 表达式 /

(2)使用RegExp构造函数

var 变量名 = RegExp( / 表达式 / )

var 变量名 = new RegExp( / 表达式 / )

4、正则表达式的使用

(1)test()方法:返回Boolean值。true表示符合正则规则,false表示不符合正则规则

正则对象.test(被验证的字符串)

(2)模式修饰符:/表达式/[switch]

switch:是模式修饰字符,是可选的,通过它可以对正则进行进一步的设置

g:用于在目标字符串中实现全局匹配

i:忽略大小写

(3)边界符:

^:表示匹配行首的文本(表示以谁开头)

$:表示匹配行尾的文本(表示以谁结尾)

(4)预定义字符:

. : 除了\n以外的任意单个字符

\d:表示0~9之间的任意数字,等价于[0-9]

\D:表示匹配0~9以外的字符,等价于[ ^ 0 - 9 ]

\w:表示匹配任意字母、数字和下划线。等价于[a~zA~Z0~9]

\W:除所有字母、数字和下划线以外的字符,相当于[ ^ a - zA - Z0 - 9]

\b:单词分界符

\s:匹配空格(包括换行符、制表符、空格符等),相当于[\t\r\v\f]

match(正则表达式)方法:是String对象的方法,用来截取符合正则表达式规则的子串,返回值是数组

强调:转义字符 \ ,若要输出反斜杠,要使用连续两个\返回值是数组

(5)字符范围示例

[cat]:匹配字符集合中的任意一个字符c、a、t

[ ^ cat]:匹配除c、a、t以外的字符

[A-Z]:匹配字母A~Z范围内的字符

[\u4e00-\u9fa5]:匹配任意一个中文字符

字符组合:如果允许用户输入英文字母(不区分大小写)、数字、短横线-、下划线_的正则情况

var rg = /^[a-zA-Z0-9_-]$/;

二、正则表达式的量词符和括号符

1、量词符

{m,n}:表示{}之前的字符可以出现m~n次

{n}:表示{}之前的字符可以出现n次

课堂练习:课堂练习:验证西安的座机号码,定义正则表达式测试用户输入的座机号是否正确

<style>
    .ok {
        color: green;
    }
    .no {
        color: red;
    }
</style>
<body>
    电话号码:<input type="text" id="num"><span id="sp"></span>
    <script>
​
        let reg = /^029[0-9]{8}$/
​
        let num = document.getElementById('num')
​
        num.addEventListener('blur', function () {
            let span1 = document.getElementById('sp')
            if (reg.test(this.value)) {
                span1.classList.remove('no')
                span1.innerHTML = '正确'
                span1.classList.add('ok')
            } else {
                span1.classList.remove('ok')
                span1.innerHTML = '错误'
                span1.classList.add('no')
            }
        })
    </script>
</body>

(1)? :匹配 ?之前的字符零次或一次。例如:hi?t --- ht / hit

注意:exec(字符串):是正则表达式对象的方法。返回值类型是数组

(2)+ :匹配+前面的字符一次或多次。例如bre + ad ---- bre...ad

(3)* :匹配 * 前面的字符0次或多次。例如bre * ad ----brad、bre...ad

(4){n} :表示{}前面的字符可以匹配n次。例如:hi{3}t ---- hiiit

(5){n,} :匹配{}前面的字符最少n次。例如:ht{3,}t ---- hiii...t

(6){n,m} :匹配{}前面字符n-m次。

2、括号字符:改变限定符的范围

(1)改变限定符范围之前:catch| er -----匹配结果:catch、er

(2)改变限定符范围之后:cat(ch|er) ----匹配结果:catch、cater

(3)分组

分组前:abc{2} —->表示{}前面的c要出现两次

分组后:a(bc){2} —->表示{}前面的bc要出现两次

三、正则表达式的捕获与非捕获

1、捕获:使用小括号可以进行分组,当小括号后面有量词符时,就表示对整个组进行操作。

let reg = /(\d)(\d)(\d)(\d)/   //表示4位数字,每位数字都是0~9
let str = '12a4'

2、进行字符串的替换:replace结合正则表达式实现

var reg = /(\w+)\s(\w+)\s(\w+)/gi;
var str = 'Regular Capture woniu';
let newStr = str.replace(reg,'$3 $1 $2')
console.log(newStr)

四、贪婪匹配与懒惰匹配

1、贪婪匹配:表示匹配尽可能多的字符。是正则表达式的默认匹配方式

2、懒惰匹配:表示匹配尽可能少的字符。通过 ?来实现

var str = 'webWEBWebwEb';
var reg1 = /w.*b/gi  //贪婪匹配
console.log(reg1.exec(str))
var reg2 = /w.*?b/gi //懒惰匹配,表示只要有一次匹配成功即可,不会继续进行匹配
console.log(reg2.exec(str))

五、正则表达式的优先级

一级:\ 转义字符

二级:(),[]

三级*、+、?、{n}、{n,}、{n,m}

四级:^,$,\任何元字符、任何字符

示例:

身份证的正则表达式:

 /^[1-9]\d{5}(19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值