Метод 1
Может быть, здесь может работать простое совпадение и конкат:
const regex = /^[^:]+:/gm;
const str = `This is my image url: ![image](www.example.com/images/abcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefg)`;
let m;
while ((m = regex.exec(str)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
// The result can be accessed through the `m`-variable.
m.forEach((match, groupIndex) => {
console.log(match.concat(' too long'));
});
}
Если вы хотите упростить / изменить / изучить выражение, это объяснено на верхней правой панели regex101.com . Если хотите, вы также можете посмотреть в эту ссылку , как она будет сопоставляться с некоторыми примерами ввода.
Метод 2
Если у вас естьнекоторые другие подобные контексты в ваших входных данных, мы можем попробовать более ловкое выражение, если это будет необходимо:
const regex = /(.+?)(!\[image\]\s*\((?:https?)?(?:w{3}\.)?[^)]*\))/gm;
const str = `This is my image url: ![image](www.example.com/images/abcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefg)`;
const subst = `$1too long`;
const result = str.replace(regex, subst);
console.log(result);
Метод 3
Может быть ненужным, но еще одно предположениетоже:
const regex = /.+?(?=!\[image\]\s*\((?:https?)?(?:w{3}\.)?[^)]*\))/gm;
const str = `This is my image url 1: ![image](www.example.com/images/abcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefg)
This is my image url 2: ![image](https://www.example.com/images/abcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefg)`;
let m;
while ((m = regex.exec(str)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
m.forEach((match, groupIndex) => {
console.log(match.concat(' too long'));
});
}