Не могу разобраться в replace в регулярном выражении.
Вот сама регулярка:
/(^https?:\/\/www\.dropbox\.com)(\/s\/\w+\/[\wа-яА-Яё]+\.\w+)/
Применяться будет к такого рода ссылкам:
https://www.dropbox.com/s/2f15pra2dssf7zvwf7b/333.jpg?dl=0
https://www.dropbox.com/s/rhdkdf15dykctjdp004/376.jpg?dl=0
https://www.dropbox.com/s/kx70sj1gru4vsawhg9/517.jpg?dl=0
Вообще задача состоит в том, чтобы заменить, к примеру, первую ссылку, на такую:
https://dl.dropboxusercontent.com/s/2f15pra2dssf7zvwf7b/333.jpg
То есть нужно заменить первую часть ссылки и убрать ненужный мусор типа ?dl=0
.
Вот сама функция .replace
:
var1.replace(/(^https?:\/\/www\.dropbox\.com)(\/s\/\w+\/[\wа-яА-Яё]+\.\w+)/,
"https://dl.dropboxusercontent.com/$2")
Пример на regex101: https://regex101.com/r/ErgOTW/3
То есть по сути мне не понятно, почему .replace
просто не заменяет совпадение конкретно в первой группе и не выводит всё остальное, а заменяет прям всё найденное совпадение. Не знаю как этого избежать.
Посоветуйте решение, пожалуйста.
Проблема вашей регулярки в том, что она не захватывает часть после знака ?
. Как следствие, String.prototype.replace
применяется только к основной части URL.
Правильная регулярка может иметь вид:
var re = /(^https?:\/\/www\.dropbox\.com)(\/s\/\w+\/[\wа-яё]+\.\w+)\?.*/mgi;
[
'https://www.dropbox.com/s/2f15pra2dssf7zvwf7b/333.jpg?dl=0',
'https://www.dropbox.com/s/rhdkdf15dykctjdp004/376.jpg?dl=0',
'https://www.dropbox.com/s/kx70sj1gru4vsawhg9/517.jpg?dl=0'
].forEach(function(str) {
console.log(str.replace(re, 'https://dl.dropboxusercontent.com$2'));
});
Вот рабочий пример на JSFiddle. А вот и пример на regex101 для иллюстрации работы самого регулярного выражения.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Этот скрипт подгружает контент без перезагрузки страницыВ функции указана подгрузка в один div, КАК СДЕЛАТЬ ПОДГРУЗКУ В РАЗНЫЕ div ОДНОВРЕМЕННО...