解析したい文字列を正常に解析する 2 つの正規表現を作成しました。ただし、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 などの特別に細工された正規表現は、入力文字列 aaaaaaaaaaaaaaaaaaaaaaaaaaaaabs を評価するのに数秒かかります。問題は、入力に文字が追加されるたびに、正規表現の評価に必要な時間が 2 倍になることです。ただし、同等の正規表現 a+s (グループ化なし) はミリ秒単位で効率的に評価され、入力サイズに比例してスケーリングされます。
TLDR: 正規表現を改善する方法はありますか?