资讯专栏INFORMATION COLUMN

正则表达式中的“环视”及实际项目应用

Lorry_Lu / 2158人阅读

摘要:什么是环视环视结构不匹配任何字符,只匹配文本中的特定位置,这一点与单词分界符锚点以及相似,但是环视比它们更加通用,并且能够检测两侧文本。利用环视的正则表达式为我们知道表示非数字,那么这里表达式如果修改为是否可以正常工作。

什么是环视(lookaround)?

环视结构不匹配任何字符,只匹配文本中的特定位置,这一点与单词分界符b、锚点^以及$相似,但是环视比它们更加通用,并且能够检测两侧文本。

环视的四种类型
1)顺序环视-肯定(从左至右查看文本):表达式为(?=……),匹配成功的条件为表达式能够匹配右侧文本,比如(?=d)
2)顺序环视-否定(从左至右查看文本):表达式为(?!......),匹配成功的条件为表达式不能匹配右侧文本,比如(?!d)
3)逆序环视-肯定(从右至左查看文本):表达式为(?<=……),匹配成功的条件为表达式能够匹配左侧文本,比如(?<=d)
4)逆序环视-否定(从右至左查看文本):表达式为(? 环视在个人经历项目中的两个实际应用:

团队管理中检测对于指定项目的权限:项目中我们是用类似38:1,749:0,188:1这样的字符串来存储团队普通成员对于各用户项目的权限,比如其中749代表ID为749的用户项目,冒号标记符后跟随的0数字表示具有查看权限,1数字则表示兼具查看和设置权限,多个用户项目权限标记间以逗号分隔,如果对于一个用户项目没有任何权限,则整个权限字符串中将不会出现该项目ID。基本结构定了之后,那么我们其中一个类似的查找检测权限问题是,已知用户权限字符串,检测对于指定项目比如749是否具有设置权限,在这里的问题情境其实就是检测用户权限字符串中是否包含749:1这个子字符串。可以有如下几种解决方式:
1)可以不用正则表达式,先以逗号作为分隔符拆分权限字符串,可以得到一个数组,该数组每一个元素为类似749:1这样的单个项目权限标记子字符串,再检测这个数组中是否存在749:1这一元素项。
2)匹配749:1出现情况的正则表达式为^749:1|,749:1,进一步可以简化为(^|,)749:1(注意:一个小陷阱,想想这里如果不使用正则表达式匹配,而只使用普通字符串749:1作为要查找匹配的目标会出现什么问题?)。
3)利用环视的正则表达式为(?(我们知道D表示非数字,那么这里表达式如果修改为(?<=D)749:1是否可以正常工作?)。

千分位格式化数值(各分析页中各指标块数据用JavaScript进行逗号格式化):例如我们需要将数值298444215格式化为298,444,215,正常思维是从这个数的右边开始,每次数3位数字,如果左边还有数字的话,就加入一个逗号。如果我们能把这种思路直接用到正则表达式中当然很好,可惜正则表达式一般都是从左向右工作的。不过变换下思路,逗号应该加在“左边有数字,右边数字的个数正好是3的倍数的位置”,这样就可以使用环视来解决这个问题了。初步的正则表达式为:(?<=d)(?=(ffffd)+$),并结合开发语言的replace替换功能进行全局匹配替换。(想想这里如果去掉$结果会如何?)遗憾的是,JavaScript不支持逆序环视,因此如果要使用JavaScript中的正则表达式进行处理,刚刚的匹配正则表达式就需要修改为:(d)(?=(ffffd)+$),并需要结合对捕获型括号的反向引用$1进行全局匹配替换。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/100958.html

相关文章

  • 正则达式前端使用手册

    摘要:非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。 导读 你有没有在搜索文本的时候绞尽脑汁, 试了一个又一个表达式, 还是不行. 你有没有在表单验证的时候, 只是做做样子(只要不为空就好), 然后烧香拜佛, 虔诚祈祷, 千万不要出错. 你有没有在使用sed 和 grep 命令的时候, 感觉莫名其妙, 明明应该支持的元字符, 却就是匹配不到. 甚至,...

    zhoutao 评论0 收藏0
  • php实战正则达式(二):提取html元素

    摘要:在阅读这篇文章前最好把同系列文章实战正则表达式一验证手机号先仔细阅读一遍。但实际上这样一个表达式是无法从上面的中提取第一个元素的这里主要的问题是在默认情况下点号字符无法匹配换行符。但是很遗憾,正则表达式中没有排除型子表达式或者说排除型分组。 这篇文章通过提取html元素介绍了正则表达式中模式修饰符、贪婪匹配与非贪婪匹配、Unicode模式、环视等知识点。在阅读这篇文章前最好把同系列文章...

    ityouknow 评论0 收藏0
  • 【JS基础】正则达式入门

    摘要:对于含有量词正则表达式,量词是贪婪模式,会优先选择尽可能多的匹配修饰的字符,所以该表达式会优先选择匹配一个字符,当匹配不到时再选择不匹配字符。 正则表达式的语法 普通字符 字母、数字、汉字、下划线以及一些没有特殊定义的标点符号,都属于普通字符,正则表达式中的普通字符匹配字符本身,如: var str = abced console.log(str.match(/a/)) // [a,...

    Mr_houzi 评论0 收藏0
  • python爬虫抓取纯静态网站其资源

    摘要:下面跟大家详细分享一下写爬虫抓取静态网站的全过程。而我们上面说的元字符都代表一定的规则和占据一定的字符。 遇到的需求 前段时间需要快速做个静态展示页面,要求是响应式和较美观。由于时间较短,自己动手写的话也有点麻烦,所以就打算上网找现成的。 中途找到了几个页面发现不错,然后就开始思考怎么把页面给下载下来。 由于之前还没有了解过爬虫,自然也就没有想到可以用爬虫来抓取网页内容。所以我采取的办...

    daydream 评论0 收藏0
  • javascript正则断言的理解

    摘要:许久之后一些关于正则的黑科技才发现正则里也有较断言的东东,好吧得了解了解这是什么。注括号是必须的,写法有些语言并不完全支持,比如的正则并不支持后瞻断言表达式,使用了会报错的。 之前大三学习《编译原理》的时候老师讲了点叫断言的东西,但是这门课压根就没听懂过,所以一直找不到有价值的东西,好吧原谅我懒惰无知,理论不适合我,我只适合搬砖。许久之后一些关于正则的黑科技才发现正则里也有较断言的东东...

    kun_jian 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<