位置: 编程技术 - 正文

javascript 正则表达式分组、断言详解(js中正则表达式语法)

编辑:rootadmin

推荐整理分享javascript 正则表达式分组、断言详解(js中正则表达式语法),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:js 正则 g,js 正则 g,js中正则表达式语法,JavaScript正则表达,JavaScript正则表达,js正则表达式写法,js正则表达式gi,javascript正则表单验证,内容如对您有帮助,希望把文章链接给更多的朋友!

javascript 正则表达式分组、断言详解

提示:阅读本文需要有一定的正则表达式基础。

正则表达式中的断言,作为高级应用出现,倒不是因为它有多难,而是概念比较抽象,不容易理解而已,今天就让小菜通俗的讲解一下。

如果不用断言,以往用过的那些表达式,仅仅能获取到有规律的字符串,而不能获取无规律的字符串。

举个例子,比如html源码中有<title>xxx</title>标签,用以前的知识,我们只能确定源码中的<title>和</title>是固定不变的。因此,如果想获取页面标题(xxx),充其量只能写一个类似于这样的表达式:<title>.*</title>,而这样写匹配出来的是完整的<title>xxx</title>标签,并不是单纯的页面标题xxx。

想解决以上问题,就要用到断言知识。

在讲断言之前,读者应该先了解分组,这有助于理解断言。

分组在正则中用()表示,根据小菜理解,分组的作用有两个:

n 将某些规律看成是一组,然后进行组级别的重复,可以得到意想不到的效果。

n 分组之后,可以通过后向引用简化表达式。

先来看第一个作用,对于IP地址的匹配,简单的可以写为如下形式:

d{1,3}.d{1,3}.d{1,3}.d{1,3}

但仔细观察,我们可以发现一定的规律,可以把.d{1,3}看成一个整体,也就是把他们看成一组,再把这个组重复3次即可。表达式如下:

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

这样一看,就比较简洁了。

再来看第二个作用,就拿匹配<title>xxx</title>标签来说,简单的正则可以这样写:

<title>.*</title>

可以看出,上边表达式中有两个title,完全一样,其实可以通过分组简写。表达式如下:

<(title)>.*</1>

这个例子实际上就是反向引用的实际应用。对于分组而言,整个表达式永远算作第0组,在本例中,第0组是<(title)>.*</1>,然后从左到右,依次为分组编号,因此,(title)是第1组。

用1这种语法,可以引用某组的文本内容,1当然就是引用第1组的文本内容了,这样一来,就可以简化正则表达式,只写一次title,把它放在组里,然后在后边引用即可。

以此为启发,我们可不可以简化刚刚的IP地址正则表达式呢?原来的表达式为d{1,3}(.d{1,3}){3},里边的d{1,3}重复了两次,如果利用后向引用简化,表达式如下:

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

简单的解释下,把d{1,3}放在一组里,表示为(d{1,3}),它是第1组,(.1)是第2组,在第2组里通过1语法,后向引用了第1组的文本内容。

经过实际测试,会发现这样写是错误的,为什么呢?

小菜一直在强调,后向引用,引用的仅仅是文本内容,而不是正则表达式!

也就是说,组中的内容一旦匹配成功,后向引用,引用的就是匹配成功后的内容,引用的是结果,而不是表达式。

javascript 正则表达式分组、断言详解(js中正则表达式语法)

因此,(d{1,3})(.1){3}这个表达式实际上匹配的是四个数都相同的IP地址,比如:...。

至此,读者已经掌握了传说中的后向引用,就这么简单。

接下来说说什么是断言。

所谓断言,就是指明某个字符串前边或者后边,将会出现满足某种规律的字符串。

就拿文章开篇的例子来说,我们想要的是xxx,它没有规律,但是它前边肯定会有<title>,后边肯定会有</title>,这就足够了。

想指定xxx前肯定会出现<title>,就用正后发断言,表达式:(&#;<=<title>).*

向指定xxx后边肯定会出现</title>,就用正先行断言,表达式:.*(&#;=</title>)

两个加在一起,就是(&#;<=<title>).*(&#;=</title>)

这样就能匹配到xxx。

相信读者看到这,已经蒙了,不用急,待小菜慢慢讲来。

其实掌握了规律,就很简单了,无论是先行还是后发,都是相对于xxx而言的,也就是相对于目标字符串而言。

假如目标字符串后边有条件,可以理解为目标字符串在前,就用先行断言,放在目标字符串之后。

假如目标字符串前边有条件,可以理解为目标字符串在后,就用后发断言,放在目标字符串之前。

假如指定满足某个条件,就是正。

假如指定不满足某个条件,就是负。

断言只是条件,帮你找到真正需要的字符串,本身并不会匹配!

(&#;=X )

零宽度正先行断言。仅当子表达式 X 在 此位置的右侧匹配时才继续匹配。例如,/w+(&#;=/d) 与后跟数字的单词匹配,而不与该数字匹配。此构造不会回溯。

(&#;!X)

零宽度负先行断言。仅当子表达式 X 不在 此位置的右侧匹配时才继续匹配。例如,例如,/w+(&#;!/d) 与后不跟数字的单词匹配,而不与该数字匹配 。

(&#;<=X)

零宽度正后发断言。仅当子表达式 X 在 此位置的左侧匹配时才继续匹配。例如,(&#;<=) 与跟在 后面的 的实例匹配。此构造不会回溯。

(&#;<!X)

零宽度负后发断言。仅当子表达式 X 不在此位置的左侧匹配时才继续匹配。例如,(&#;<!) 与不跟在 后面的 的实例匹配

从断言的表达形式可以看出,它用的就是分组符号,只不过开头都加了一个问号,这个问号就是在说这是一个非捕获组,这个组没有编号,不能用来后向引用,只能当做断言。

教程到此结束,希望大家阅读愉快!

Javascript操作dom对象之select全面解析 html代码:selectid="university"optionvalue="北京大学"北京大学/optionoptionvalue="清华大学"清华大学/optionoptionvalue="北京电影学院"北京电影学院/option/selectjs原生操

微信小程序中显示html格式内容的方法 前言最近项目上遇到在微信小程序里需要显示新闻内容,新闻内容是通过接口读取的服务器中的富文本内容,是html格式的,小程序默认是不支持html格式

微信小程序访问node.js接口服务器搭建教程 前言最近在做微信的应用号小程序开发,小程序的后台数据接口需要https安全请求,所以需要我的nodejs服务器能够提供https的支持,现在就将整个https服

标签: js中正则表达式语法

本文链接地址:https://www.jiuchutong.com/biancheng/376063.html 转载请保留说明!

上一篇:selenium 与 chrome 进行qq登录并发邮件操作实例详解

下一篇:Javascript操作dom对象之select全面解析(javascript操作dom对象)

  • 残疾人保证金计算器
  • 城建税和教育费附加可以税前扣除吗
  • 防伪税控税务端官网
  • 投资性房地产出售时公允价值变动损益
  • 支票存根必须盖银行章吗
  • 个人所得税能否跨年度
  • 会计准则 现金流量
  • 所得税减免优惠明细表应分摊期间
  • 公司聚餐费用标准
  • 付拍卖佣金入什么科目核算及会计分录怎么做?
  • 商业银行退出
  • 补缴以前年度养老保险能否税前扣除
  • 挂靠被查出来后挂靠费怎么处理?
  • 补充医疗保险 个人账户可以报销吗
  • 增值税电子发票怎么作废
  • 所有的罚款都不能税前扣除吗
  • 上月预付款项 这月开了发票会计分录
  • 货物劳务和应税收入区别
  • 4月发票能入1月吗
  • 小规模纳税人可以开专票吗
  • 上月没交社保本人能交吗
  • 五险一金个人缴纳部分
  • 长期待摊费用摊销明细表
  • 损益类科目在期末均需转入什么科目
  • 金税盘减免税款可以抵扣销项税吗
  • 税控服务费政策
  • php自动跳转页面
  • vue打包速度优化
  • 分配结转制造费用时借方科目
  • phppregmatch
  • 排灯节起源
  • 保险补偿金额的计算
  • php单例模式的简写是什么
  • vue在项目中怎么用的
  • 缴纳医疗保险费会计分录
  • inotify_event
  • phpcms栏目分类
  • 2022年最新公务接待标准
  • 企业购买的结构性存款怎样做账
  • 基础土建工程是干什么的
  • 销货退回与折让的关系
  • 预提管理费用怎么计算
  • 微擎框架可以干什么
  • mongodb简单使用
  • 个体户增值税减免申报明细表怎么填
  • 不征税收入和免税收入有哪些项目
  • 固定资产会计上与税法上提折旧时间
  • 小规模开票多少成一般纳税人
  • 物流货损怎样处理
  • 对公转账房租如何填写备注
  • 公司销售红酒需要什么资质
  • 成品油发票如何下载库存
  • 打印银行电子流水发到别人邮箱,能看到我的账户余额吗
  • 固定资产处置如何申报企业所得税
  • 会计为什么要计提费用
  • 发票代码和发票号码是唯一的吗
  • 实收资本会变吗?
  • 发票抬头是个人税号怎么填
  • 为什么总让升级浏览器
  • WinXP系统能上qq但打不开网页原因分析及解决方法
  • linux怎么安装c语言编程软件
  • centos bz
  • 电脑的本地连接在哪win10
  • RunClubSanDisk.exe是什么程序? 闪迪U盘广告推介程序
  • 深度技术的系统好不好
  • 深入解析windows
  • 围绕摄像机旋转怎么设置
  • edxposed 作用域
  • unity例子
  • js 函数执行顺序
  • php上传文件到指定目录
  • ide通道怎么打开
  • jquery操作table
  • Node.js中的事件循环是什么样的
  • javascript还有人用吗
  • 简述activity的生命周期中有哪几种状态
  • each和each
  • 韩国快递关税
  • 小规模纳税人专票开1%还是3%
  • 国家税务局增值税发票平台
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设