你是否有过类似以下的需求?
点击这里立刻解决:https://dalerkd.github.io/Better_Regex.html
合并数据
将右边的内容匹配后排到左边,变为如下图的效果:
单纯的正则是没有合并功能的。
2给匹配的数据加序号
从左边变换为右边。
我们经常需要为数据增加序号,也就是数据往往和顺序相关。
单纯的正则没有提供第几次匹配这一信息,而该信息往往是重要的。
解决办法
我尝试去找相关资料,但没有什么语法似乎是原生提供这些功能的。
最后JavaScript的正则库终于给了一条容易的路径,我逼迫自己整理混乱的思绪完成这个小作品:
Batter_Regex-Github
在线地址点击:https://dalerkd.github.io/Better_Regex.html
下载并打开这个html即刻开始体验。
&t : 第几次被匹配
&0 : 右侧数据池
&1 : 右侧数据池的第1次捕获(即第一个括号)
。。。 :。。。
用例:
打开网页,长这个样子:
我们用第一个问题做例子:
合并数据:
我们用&符号来作为右侧匹配内容的指带。
效果如上图。我们完成了这项合并工作。
示例-使用匹配顺序信息
&t提供了被匹配者出现的顺序信息,演示如下:
&
符号可以按照你的需求自定义。
原理
利用JS的正则库在匹配时提供的处理时机,做这种扩展。
2017年5月6日
原先的文章
更好的正则
前两天查资料在博客遇到一个知识点:
回溯查找.
用来匹配11而不是12这种形式的数字.通过\1
Notepad++用的多了,发现正则在一些情况下不称手.
正则能这样更好:
1. 提供更多匹配数据的信息,比如它是第几次匹配次数.
2. 可以自定义替换函数
3. 数据池
从某块数据中按照某种规则获取数据,来作为替换内容用.
替换的核心是映射,匹配完毕,该是映射的作为主角的时候了.
正则提供了匹配者位置和长度的信息.替换程序利用这个位置和长度以及其他信息,对目标进行修改.
而正则也提供了无损插入删除的接口给替换程序用来操纵数据.
这样,我们就可以:
- 1.提供更多匹配数据的信息.能够让我们将数据替换为:
例子:
abcd
1a2b3c4d
- 2.匹配后替换前提供计算能力,这个是很强大的.
a 0x41
b 0x51
- 3.同样是服务第2项,比如将另一个文档的内容进行某种匹配,然后一一对应替换到这篇文档中的内容.
这里用了两次正则.
JS,Python等编程语言中的正则库似乎能实现这种效果.
但是能否更简单一些呢?
其实JS已经很简单了,看一下能否对JS这部分进行一下封装。
(已经完成。)
点击这里立刻解决:https://dalerkd.github.io/Better_Regex.html
下载并打开这个html即刻开始体验。
语法参考:
&t : 第几次被匹配
&0 : 右侧数据池
&1 : 右侧数据池的第1次捕获(即第一个括号)
。。。 :。。。