摘要:写在前面正在看的源码看到了部分感觉以前看的正则表达式基础知识已经完全不够用了现翻阅博客资料将一些中正则表达式难用的部分总结归纳方便自己和友翻阅正则分组重复匹配对于重复的匹配我们经常使用到正则表达式的分组功能我们使用正则匹配地址来实践一下假
[TOC]
写在前面 - Lionad正在看VueJS的源码, 看到了HtmlParser部分, 感觉以前看的正则表达式基础知识已经完全不够用了, 现翻阅博客资料, 将一些JS中正则表达式难用的部分总结归纳, 方便自己和sf友翻阅.
正则分组 重复匹配对于重复的匹配, 我们经常使用到正则表达式的分组功能, 我们使用正则匹配IP地址来实践一下.
假设我们要匹配的IP地址在区间 0.0.0.0 - 255.255.255.255 之间, 可以直观的了解到, 我们只需要匹配 三位数字+点号 三遍, 再匹配三位数字一遍就可以了.
这里说的 三位数字+点号 既是我们说的一种规则, 我们可以在表达式中将它们转化为规则即: d{1,3}., 当我们把规则用括号包装后, 就变成了组: (d{1,3}.), 所以匹配IP地址的正则表达式可以写作: (d{1,3}.){3}d{1,3}
换种思路, 我们也可以这样匹配: d{1,3}(.d{1,3}){3}
拓展: 聪明的你可能已经想到, d{1,3} 匹配是有疏漏的. 在实际生产过程中, d{1,3} 可能匹配 999 这种数字, 他是一个错误的IP地址段. 这里贴上真实的IP地址正则匹配供大家参考: ((25[0-5]|2[0-4]d|((1d{2})|([1-9]?d))).){3}(25[0-5]|2[0-4]d|((1d{2})|([1-9]?d))) , 另人愉快的是, 它使用的分组策略仍然是不变的.后向引用(反向引用)
我们考虑一个很特殊的情况, 当我们要匹配四个IP段相同的情况, 如 100.100.100.100 时, 重复匹配分组的策略失效了: 重复匹配分组 并不能保证匹配相同的数字 -> 这时候我们需要借助 后向引用 策略的力量了(少年, 你渴望力量吗2333, 戳我头像, 带你探索音乐与代码交织的文艺道路.)
后向引用在不同语言的正则表达式书写中, 有不同的语法, 我们讨论JS中最常见的一种, 形如: umber 的后向引用, 其中, number 代表分组的序号.
给你一个简单的栗子, 瞬间就记住了, 假使我们要匹配重复的三位数字, 我们将匹配一个数字的规则标记为一个分组: (d), 重复匹配这个分组(第一个分组)的具体内容三次: (d)1, 这样就达到了目的.
我们很容易将重复匹配和后向引用分别开来: 前者是重复匹配相同的规则, 后者是匹配分组的具体内容.
默认的一些规则需要稍加理解并记住: