正则表达式分组实例详解

发布时间 - 2026-01-10 22:06:11    点击率:

正则表达式分组:
如果想匹配3个数字,正则表达式可以用如下写法:

\d{3}

以上代码使用重复量词可以匹配3位数字。
但是在实际应用中,往往需要重复多个字符,例如我想重复ab两个字符,使用以下代码就不合适了,代码如下:

ab{3}

以上正则表达式只能够重复3次b。
为了实现重复多个字符可以使用小括号来指定子表达式或者说分组来实现此功能,例如:

(ab){3}

上面的正则就可以重复ab了。
所谓的分组就是使用小括号将一些项包括起来,使其成为独立的逻辑域,那么就可以像处理一个独立单元一样去处理小括号的内容。

下面看一段代码实例:

(\d{1,3}\.){3}\d{1,3}

上面是一个简单的ip匹配正则表达式。由小括号包裹的内容会被作为一个独立的逻辑域进行操作。
分组的作用:
在正则表达式中,分组具有举足轻重的作用,下面就简单对它的功能做一下简单的介绍。

一.起到原始的分组作用:

把单独的项目进行分组,以便合成子表达式,这样就可以像处理一个单独的字符那样,对其应用|、+、*或者?等元字符来操作它们。
实例代码如下:

var str="I love javascript and java";
console.log(str.match(/java(script)?/gi));

由以上代码的运行结果可以看出,正则表达式既可以匹配字符串javascript也可以匹配java,这是因在正则表达式中采用了分组,并且使用重复量词?,可以使前面的子表达式重复0次或者1次。

二.定义子模式:

分组另一个非常重要的作用就是在完整的模式中定义子模式。
当一个正则表达式成功的和目标字符串相匹配时,可以从目标字符串中抽出和小括号中字表达式相匹配的部分。
假如我们匹配的是以一个数字开头的后面跟着一个或者多个不区分大小写的字母的字符串,正则表达式可以这样写:

/\d[a-zA-Z]+/

假如我们真正关心和需要的是开头的数字,那么就可以将正则表达式的数字部分放入小括号就可以从检索到的匹配中抽取数字.

/(\d)[a-zA-Z]+/

三.引用子表达式:
正则表达语法中可以在同一个表达式中的后部引用前面的子表达式。这是通过在"\"后面跟随数字实现的。此数字指定了小括号字表达式在正则表达式中的位置,例如\1是引用的第一个带有圆括号的子表达式,自然\2就是第二个带有圆括号的子表达式。
特别注意:由于子表达式是可以相互嵌套的,那么计算子表达式的位置的时候,只要确定左括号的位置即可。例如:

/(java(script))/

在以上正则表达式中,嵌套的子表示是可以用\2表示。
对于子表达式的引用,并不是引用的匹配模式,而是对子表示匹配内容的引用。一般来说对子表达式的引用一般是用来实施一条约束,看下面的代码:

/(['"])[^'"]*\1/

通常情况下左右引号是相匹配的,如果前面是双引号,那么结尾也要是双引号,前面是单引号那么结尾也必须是单引号,并且字符串中间不能够再出现其他的引号,例如:

"欢迎您"
'欢迎您'

那么上面的正则表达式就实现此功能,当前面的子表达式匹配单引号的时候,那么后面的\1也就表示的是单引号,如果子表示匹配的双引号,那么后面的\2就表示的是双引号。
非引用型分组:
分组会占用一定的系统资源,尤其是正则表达式较长的时候会降低匹配速度。有时候仅仅是为了设置一个分组,并不需要引用,那么使用非引用类型分组将会是一个良好的选择。

/(java(?:script))/

以上正则就是使用非引用分组,只要在左括号后面加上一个?:即可。


# 正则表达式  # 分组  # 利用正则表达式将字符串分组示例代码  # 正则表达式高级用法之分组的使用教程  # 正则表达式分组与引用的使用  # 浅谈正则表达式中的分组和引用实现方法  # 正则表达式中的$分组使用示例详解  # 的是  # 就可以  # 多个  # 是一个  # 这是  # 单引号  # 双引号  # 欢迎您  # 相匹配  # 可以用  # 我想  # 第一个  # 尤其是  # 也就  # 将会  # 就不  # 其他的  # 对其  # 第二个 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何实现本地化和多语言支持?(i18n教程)  简单实现Android文件上传  Linux系统命令中tree命令详解  jimdo怎样用html5做选项卡_jimdo选项卡html5实现与切换效果【指南】  制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?  Win11应用商店下载慢怎么办 Win11更改DNS提速下载【修复】  详解Android中Activity的四大启动模式实验简述  悟空浏览器如何设置小说背景色_悟空浏览器背景色设置【方法】  Laravel如何实现用户密码重置功能?(完整流程代码)  如何快速上传自定义模板至建站之星?  网站制作企业,网站的banner和导航栏是指什么?  怎么用AI帮你为初创公司进行市场定位分析?  Laravel如何监控和管理失败的队列任务_Laravel失败任务处理与监控  免费视频制作网站,更新又快又好的免费电影网站?  JS碰撞运动实现方法详解  javascript和jQuery中的AJAX技术详解【包含AJAX各种跨域技术】  ChatGPT回答中断怎么办 引导AI继续输出完整内容的方法  如何在IIS中新建站点并解决端口绑定冲突?  Laravel怎么实现模型属性的自动加密  Laravel如何从数据库删除数据_Laravel destroy和delete方法区别  Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】  Laravel用户密码怎么加密_Laravel Hash门面使用教程  JS去除重复并统计数量的实现方法  html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】  企业网站制作这些问题要关注  在线制作视频的网站有哪些,电脑如何制作视频短片?  详解Android——蓝牙技术 带你实现终端间数据传输  网站建设保证美观性,需要考虑的几点问题!  北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?  nginx修改上传文件大小限制的方法  IOS倒计时设置UIButton标题title的抖动问题  HTML透明颜色代码怎么让下拉菜单透明_下拉菜单透明背景指南【技巧】  WEB开发之注册页面验证码倒计时代码的实现  历史网站制作软件,华为如何找回被删除的网站?  品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?  如何在宝塔面板创建新站点?  Laravel的契約(Contracts)是什么_深入理解Laravel Contracts与依赖倒置  香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧  Laravel定时任务怎么设置_Laravel Crontab调度器配置  Laravel如何使用Telescope进行调试?(安装和使用教程)  Laravel如何使用Laravel Vite编译前端_Laravel10以上版本前端静态资源管理【教程】  Laravel如何使用Seeder填充数据_Laravel模型工厂Factory批量生成测试数据【方法】  laravel服务容器和依赖注入怎么理解_laravel服务容器与依赖注入解析  php增删改查怎么学_零基础入门php数据库操作必知基础【教程】  Laravel怎么进行浏览器测试_Laravel Dusk自动化浏览器测试入门  Google浏览器为什么这么卡 Google浏览器提速优化设置步骤【方法】  佐糖AI抠图怎样调整抠图精度_佐糖AI精度调整与放大细化操作【攻略】  南京网站制作费用,南京远驱官方网站?  如何快速搭建高效WAP手机网站?  Python文件异常处理策略_健壮性说明【指导】