学习正则表达式

本文详细介绍正则表达式的各种语法元素,包括匹配文本、字符集合、边界限定等,并通过实例演示如何使用JavaScript实现正则匹配。

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

这里分享一个正则表达式测试工具,学习的同时自己可以动手敲一敲。
正则表达式测试工具


小栗子

从W3C上,很容易学习到RrgExp对象的使用。
简单的举个小栗子。其实就是那个测试工具的简易版。

var str='this is a string to test my regexp';
    var re='s';
    regexpFun(str,re);
    function regexpFun(str,reg){
        var reg=new RegExp(reg,'g');
        var arrs=[];
        var lastidx=-1;
        while(lastidx!=0){
            var arr=[];
            var a=reg.exec(str);
            if (reg.lastIndex != 0)
            {
                arr[0]=a.toString();
                arr[1]=a.index;//当前目标字符的位置下标
                arrs.push(arr);
            }
            lastidx=reg.lastIndex;//下一个匹配位置,RegExp参数不设置g,是无效的
        }
        console.table(arrs);
    }

这里写图片描述

ok,让我们躁起来!


语法

匹配纯文本

/目标字符/

匹配任意字符(包含关键字符)

就是一个英文的句点,注意,在字符集合区间里这个点就只是普通字符,在字符集合区间外面时如果要匹配点本身需要转译\.

字符集合区间

以匹配不区分大小写的字符位例,我们可以利用字符集合区间[ ]去匹配
比如[sS]将匹配s或S,最终的结果就感觉不会区分大小写。

过滤匹配

就是利用字符集合区间
执行一次[0-9a-zA-Z]将匹配到一个数字或小写字母或一个大写字母
\d ==[0-9]任何一个数字
\w==[a-zA-Z_]任何一个数字、字母、下划线
\s==[\f\n\r\t\v]任何一个空白字符

取非匹配

就是在字符集合区间的正则表达式前面加^符,意味,除了这个字符集合区间能匹配到的其他字符都符合匹配要求
\D ==[^0-9]任何一个不是数字的字符
\W==[^a-zA-Z_]任何一个不是数字、字母、下划线的字符
\S==[^\f\n\r\t\v]任何一个不是空白字符的字符

重复匹配

当我们需要匹配的目标字符有很多重复字符时
test@test.test

\w\w\w\w@\w\w\w\w.\w\w\w\w

很麻烦很复杂很丑,这时候可采用多个匹配
+:匹配一个或多个
*:匹配0个或多个
?:匹配0个或一个

\w+@\w+.\w+

但*+?的匹配次数太单一
那就用{ }设置重复匹配次数
testtesttest@tes.testtest

@\w{3}

将只会匹配到@tes

重复匹配次数还可以设置匹配区间{sub,sup}
@testtesttest@tes.@test@test

@\w{3,5}

这里写图片描述

避免过度匹配

*和+属于贪婪型
什么是贪婪型呢,就是他会尽可能匹配更多字符
比如:<b>hahah</b><b>zxzxzx</b>
我们想匹配一对标签
<b>.*</b>
没问题吧
可是,事实上他会从第一个<b>一直匹配到最后一个</b>
<b>hahah</b><b>zxzxzx</b>
现在我们就使用懒惰型,就在我们的贪婪型后面加上?就变成了流动性
<b>.*?</b>

位置匹配 边界限定

有时候我们对匹配字符的位置有要求
比如:this is a baby-gril
我们想匹配be动词,is,但是文中有两个is
这时候我们可以采用边界限定

\bis\b
\b是匹配单词边界
\B则不会匹配单词边界
比如以下要匹配baby,gril中间的连字符

this is a baby - gril

\b-\b是匹配不到的,而\B可以

子表达式

如果我们需要整体匹配
比如abc;abbbbbbbbbbbc;abc;abc;abbbbbbbbbbbc;abc;abc;abc;abc;abc;
我要全部匹配···abc;
就可以使用子表达式()
子表达式将被包裹的正则表达式作为一个整体去匹配

(abc;)+

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值