我制作了两个正则表达式,成功解析了我想要解析的字符串。但是,在针对 Sonar Cloud(质量和安全检查)运行包含正则表达式的代码时,我会收到有关性能和安全性的警告。
这是我制作的正则表达式(注意 · 和 - 字符):
// yearToYearWithIrrWAndDotRegex parses: · 1998 - 2001, · 2001 - Present
const yearToYearWithIrrWAndDotRegex = /·.*?(19|20)\d{2}.*?-.*?((19|20)\d{2}|Present)?/g;
// yearToYearRegex parses: 1998 - 2001, 2001 - Present
const yearToYearRegex = /(19|20)\d{2}.*?-.*?((19|20)\d{2}|Present)/g;
声纳云警告:
根据输入字符串评估正则表达式可能是一项非常耗费 CPU 的任务。特制的正则表达式(例如 (a+)+s)将需要几秒钟来评估输入字符串 aaaaaaaaaaaaaaaaaaaaaaaaaaaabs。问题是输入中每增加一个字符,计算正则表达式所需的时间就会翻倍。但是,等效的正则表达式 a+s(没有分组)在毫秒内有效地评估,并随输入大小线性缩放。
TLDR:有什么方法可以让我的 RegEx 变得更好?