У меня есть следующее регулярное выражение, которое отлично работает при разборе градиента
/(?:\s*)(?:linear|radial)-gradient\s*\(((?:\([^\)]*\)|[^\)\(]*)*)\)/g
Когда некорректная строка передается функции regex.exec
например:
var regex = /(?:\s*)(?:linear|radial)-gradient\s*\(((?:\([^\)]*\)|[^\)\(]*)*)\)/g;
var test = "radial-gradient( circle farthest-corner, white";
regex.exec(test);
Браузер зависает с невосприимчивым скриптом, пока он не истечет.
Когда я пробовал это как regex101, я получаю таймаут с сообщением
Ваше выражение заняло слишком много времени, чтобы закончить и было прекращено. Увеличьте время ожидания и повторите попытку.
Можете ли вы помочь мне переписать регулярное выражение, чтобы он не перегревался, если он не может найти совпадение? Я, конечно, также хотел бы знать, почему это время.
Нет необходимости хранить двойной вложенный звездный квантификатор:
/(?:\s*)(?:linear|radial)-gradient\s*\(((?:\([^\)]*\)|[^\)\(])*)\)/g