Regex делает браузер невосприимчивым

1

У меня есть следующее регулярное выражение, которое отлично работает при разборе градиента

/(?:\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, я получаю таймаут с сообщением

Ваше выражение заняло слишком много времени, чтобы закончить и было прекращено. Увеличьте время ожидания и повторите попытку.

Можете ли вы помочь мне переписать регулярное выражение, чтобы он не перегревался, если он не может найти совпадение? Я, конечно, также хотел бы знать, почему это время.

Теги:
timeout

1 ответ

1
Лучший ответ

Нет необходимости хранить двойной вложенный звездный квантификатор:

/(?:\s*)(?:linear|radial)-gradient\s*\(((?:\([^\)]*\)|[^\)\(])*)\)/g

См. Демонстрацию

  • 0
    Спасибо! Я бы не понял этого. Потребовалось некоторое время, чтобы понять, почему регулярное выражение все еще работает без вложенной звезды. Я все еще не понимаю, почему время ожидания регулярного выражения все же.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню