Может ли регулярное выражение JavaScript вызвать сбой браузера.Как работает urlPath = urlPath.replace (/(.*)+(#)$/ i, '$ 1');разбился хром - PullRequest
0 голосов
/ 30 ноября 2018

Я добавил простое регулярное выражение в консоли dev, и браузер chrome firefox и другие браузеры сошли с ума.

Это выражение.:

urlPath = window.location.href;
urlPath = urlPath.replace(/(.*)+(#)$/i,'$1');

Почему при этом зависали браузеры?Я не получил никаких подсказок.Любая помощь будет оценена.

PS.Я пытался избавиться от хеша в конце строки URL, которая будет передана в window.location.href

1 Ответ

0 голосов
/ 30 ноября 2018

Да, это может сделать ReDoS , если вы получите что-то после #

Измените его на /(.*)(#)$/i

Это будет работать

console.log('12345678901234567890#12345'.replace(/(.*)(#)$/i, '$1'));
но это повешит ваш браузер

console.log('12345678901234567890#12345'.replace(/(.*)+(#)$/i, '$1'));

Если вы хотите сопоставить все до #, используйте ^([^#]*)

console.log('/11586258/mozhet-regulyarnoe-vyrazhenie-javascript-vyzvat-sboi-brauzera-kak-rabotaet-urlpath-urlpath-replace-razbilsya-hrom'.match(/^([^#]*)/)[0]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...