javascript核心技术(五十八)正则表达式(九)反向引用\num与引用替换$num

[复制链接]
查看: 1252|回复: 31
发表于 2023-1-30 12:34:38 | 显示全部楼层 | 阅读模式
首先来解释一下反向引用的概念
\num --它代表表达式的第n个子匹配结果,应用于表达式中。例如\1就代表第一个匹配结果,\2就代表第2个匹配结果。
$num --它同样代表表达式的第n个匹配结果,与\num不同的是,它应用于替换表达式中。

下面我们看代码
一、反向引用 \num
<!DOCTYPE html>
<html>

<head>
        <title>反向引用\num</title>
</head>

<body>
        <script type="text/javascript">
        var str = '1122 3434 5566 7879 9887';
        //请匹配出连续的四个数字,要求第一和第二数字相同,第三和第四数字相同
        var res = str.match(/(\d)\1(\d)\2/g);  
        // 解释一下以上表达式
        // \1代表第一个子匹配项,即第一个小括号匹配的内容,所以(\d)\1 代表两个连续的数字
        // \2同理,所以(\d)\1(\d)\2代表4个连续的数字,第一个数字和第二个数字一样,第三个和第四个数字一样。
        console.log(res);// [1122 , 5566]

        //匹配连续四个数字,第一和第三数字相同,第二和第四数字相同
        var res = str.match(/(\d)(\d)\1\2/g);
        console.log(res); //[3434]

        //匹配连续四个数字,第一和第三数字相同
        var res = str.match(/(\d)\d\1\d/g);
        console.log(res); //[3434 , 7879]
        </script>
</body>

</html>

javascript核心技术(五十八)正则表达式(九)反向引用\num与引用替换$num

二、引用替换 $num
<!DOCTYPE html>
<html>

<head>
        <title>反向引用$num</title>
</head>

<body>
        <script type="text/javascript">
        var str = '1122 3434 5566 7879 9887';
        //请在以上的字符串中匹配出连续的四个数字,要求第一和第二数字相同,第三和第四数字相同,并将相同的数字只保留一个
        //例如:匹配到1122则为12,匹配到5566则为56
        var res = str.replace(/(\d)\1(\d)\2/g, '$1$2');
        //解释一下以上的表达式
        //(\d)\1(\d)\2表示匹配连续的4个数字,前两个相同,后两个相同
        //由于我们的要求是:重复的数字只保留一个,所以使用replace替换来实现
        //该替换方法的意思是:将前面正则表达式匹配到的内容替换为后面的$1$2所代表的内容
        //$1代表的是前面的第一个子匹配项,即第一个(\d),$2代表第二个子匹配项,即第二个(\d),所以$1$2等于(\d)(\d)
        //这样一来,就去除了重复的数字
        //执行结果为12 3434 56 7879 9887,因为1122和5566符合我们的正则规则,然后执行替换结果即是12 3434 56 7879 9887
        console.log(res);
        </script>
</body>

</html>

javascript核心技术(五十八)正则表达式(九)反向引用\num与引用替换$num

三、禁止反向引用
<!DOCTYPE html>
<html>

<head>
        <title>反向引用$num</title>
</head>

<body>
        <script type="text/javascript">
        //禁止反向引用 (?javascript核心技术(五十八)正则表达式(九)反向引用\num与引用替换$num
        //表示?:所在小括号中的子匹配项不参与反向引用
        var str = '1122 3434 5566 7879 9887';
        var res = str.match(/(?:\d)(\d)\1\d/g);
        //解释
        //(?:\d)(\d)\1\d 其中的\1表示的不再是第1个小括号的匹配结果,而是第2个小括号的匹配结果,因为第一个小括号不参与反向引用
        //所以,该表达式的含义为:匹配连续的4个数字,要求第2个和第3个相同
        console.log(res); //[9887]
        </script>
</body>

</html>

javascript核心技术(五十八)正则表达式(九)反向引用\num与引用替换$num

以上语法是正则表达式中非常重要的语法,被广泛应用于伪静态规则的编写中,请大家多练习多理解。
易博软件介绍

0

主题

17

帖子

9

积分

营销入门

Rank: 2

积分
9
发表于 2023-2-23 21:19:59 | 显示全部楼层
在这之前.我还很盲目.不知道到底要学什么

0

主题

18

帖子

10

积分

营销入门

Rank: 2

积分
10
发表于 2023-3-7 07:40:28 | 显示全部楼层
我很欣赏你这么说  其实这是每个编程的人应该知道的

0

主题

29

帖子

16

积分

营销入门

Rank: 2

积分
16
发表于 2023-3-18 21:35:07 | 显示全部楼层
Good!

0

主题

14

帖子

8

积分

营销入门

Rank: 2

积分
8
发表于 2023-3-25 22:40:50 | 显示全部楼层
很好的帖子,顶了

0

主题

18

帖子

10

积分

营销入门

Rank: 2

积分
10
发表于 2023-4-1 11:02:43 | 显示全部楼层
很好,读了受益很多  

0

主题

9

帖子

5

积分

营销入门

Rank: 2

积分
5
发表于 2023-4-6 05:06:18 | 显示全部楼层
peifu

0

主题

10

帖子

6

积分

营销入门

Rank: 2

积分
6
发表于 2023-4-11 07:05:28 | 显示全部楼层
真的是让很受用,谢谢你的文章。  真的是学无止境啊!

0

主题

14

帖子

8

积分

营销入门

Rank: 2

积分
8
发表于 2023-4-15 19:00:01 | 显示全部楼层
看来我应该从计算机基础学习了,很受启发。。。。。。。。。。

0

主题

15

帖子

8

积分

营销入门

Rank: 2

积分
8
发表于 2023-4-20 23:12:21 | 显示全部楼层
哎~~~~~看 后 真的有种说不出的滋味 ,我想我还现在还不是一名合格的程序员     但我会按照师哥师姐说的那样好好的努力 ,我想我相信中国有最强的程序员,我也会    努力的成为他们当中的一员的啊!!!!    真的谢谢你 给我们大家上了一课啊!!!!    中国要想在IT产业发展起来 就需要这样的人啊!!!!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1、请认真发帖,禁止回复纯表情,纯数字等无意义的内容!帖子内容不要太简单!
2、提倡文明上网,净化网络环境!抵制低俗不良违法有害信息。
3、如果你对主帖作者的帖子不屑一顾的话,请勿回帖。谢谢合作!
3、问答求助区发帖求助后,如有其他用户热心帮您解决问题后,请自觉点击设为最佳答案按钮。

 
 
QQ在线客服
QQ技术支持
工作时间:
8:00-18:00
软著登字:
1361266号
官方微信扫一扫
weixin

QQ|小黑屋|慈众营销 ( 粤ICP备15049986号 )|网站地图

自动发帖软件 | 自动发帖器 | 营销推广软件 | 网络营销工具 | 网络营销软件 | 网站推广工具 | 网络推广软件 | 网络推广工具 | 网页推广软件 | 信息发布软件 | 网站推广工具 | 网页推广软件

Powered by Discuz! X3.4   © 2012-2020 Comsenz Inc.  慈众科技 - Collect from 深圳吉宝泰佛文化有限公司 公司地址:罗湖区黄贝街道深南东路集浩大厦A1403

返回顶部 返回列表