JavaScript正则表达式进阶

JavaScript正则表达式进阶,第1张

1.分组 ()

1.在正则表达式中添加括号,可以将匹配的字符串分组,可以分离我们匹配的字符串。

2.分组可以简化正则表达式,可以在正则表达式中引用分组本身。

3.分组可以捕获数据。

分组改怎么使用呢? --->在一长串数据中单独提取出我们想要的数据的时候

 // 分组的用法
        // 2022-5013-08
        // 2022 5013 08
        // 2022501308
        // 使用正则表达式将以上的数字提取出来 2022 5013 08
        var a = '2022-5013-08';
        var b = '2022 5013 08';
        var c = '2022501308';
        var d = /\d{4}[\-\s]?\d{4}[\-\s]?\d{2}/g;
        console.log(a.match(d));
        console.log(b.match(d));
        console.log(c.match(d));

我们可以看到,成功提取处了想要的数字。

2.分组中的或者符号 |

这个或者符号在获取文件类型后缀的时候,比较方便。话不多说,上代码。

// 文件1.html
        // 文件2.js
        // 文件3.css
        var a = "文件1.html"
        var b = "文件2.js"
        var c = "文件3.css"
        var wenjian = /(.html|.js|.css)/g
        console.log(a.match(wenjian));
        console.log(b.match(wenjian));
        console.log(c.match(wenjian));

可以看见最后的结果是可以匹配到到以上三种类型的文件后缀。

3. 非捕获分组     (?:表达式)

        当我们不需要捕获某个分组内的内容,但是又想要使用分组的时候。就使用非捕获分组(?:表达式)

        // 20-5013-08
        // 202 5013 08
        // 2022501308
        // 使用正则表达式提取
        var a = '20-5013-08';
        var b = '202 5013 08';
        var c = '2022 501308';
        var d = /(?:\d{2}|\d{3}|\d{4})[\-\s]?\d{4}[\-\s]?\d{2}/g;
        console.log(a.match(d));
        console.log(b.match(d));
        console.log(c.match(d));
4.分组的回溯引用        \+数字

什么是分组的回溯引用呢? 先看例子。

        // 下面有两个html标签 一个是错误的 一个正确的 我们不想找到错误的html标签 该怎么办呢?
        //  123

找不到我

// sagdhja可以找打我 var a = '123

找不到我

'; var b = 'sagdhja可以找打我'; var str = /<(\w+)>(.*?)<\/>/g console.log(a.match(str)); console.log(b.match(str));

从例子里面我们可以看到正则表达式中有 \1 这个写法。这个就是分组的回溯 \1 就表示这个表达式中的第一个分组,\2 表示正则表达式中的第二个分组,可以依次类推。

用法就是如果需要后面的内容与前面的内容一样的时候,我们可以直接这样使用。

5.正向先行断言     (?=表达式)

是从左往右看,作用是保证右边必须出现某个字符

var str = /你很漂亮(?=啊)/g

       这个正则表示"你很漂亮"的后面必须是"啊",否则就匹配不到。这种写法就叫做正向先行断言。先行断言可以用来判断字符串是否符合特定的规则。

6.反向先行断言    (?!表达式)

也是从左往右看,作用是保证右边不能出现某个字符

var str = /你很漂亮(?!啊)/g

      这个正则表示"你很漂亮"的后面必须不是"啊",否则就匹配不到。这种写法就叫做反向先行断言。

7.正向后行断言      (?<=表达式)

先行断言和后行断言只有一个区别,就是先行断言从左往右看,后行断言从右往左看.

var str = /(?<=张)\S+/   // 匹配所有姓张的人的名字 但是不匹配姓
8.反向后行断言       (?var str = /(?

这种就是反向先行断言,表示喜欢你的的前面不能有我

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1322824.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-12
下一篇 2022-06-12

发表评论

登录后才能评论

评论列表(0条)