Я пытаюсь заменить строку глобально, используя переменную, но получаю неожиданную замену при ее замене. Я искал ту же проблему, но не нашел решения, поэтому публикую здесь. Может быть, вы, ребята, приведете меня туда, где я делаю ошибку.
Вот случай:
- У меня есть тело письма
HTML
и список ссылок, которые я ' ve извлечен из тела письма и сохранен как массив. - Я пытаюсь перебрать массив ссылок и попытаться найти совпадение в теле письма.
- И когда я используя метод
replace()
для замены ссылки путем добавления некоторого префикса.
Выглядит довольно прямолинейно, не так ли?
Вот проблема, которую я получаю при замене ссылок.
Есть несколько повторяющихся ссылок. При попытке заменить их префиксом, он заменяется 2 раза.
например,
prefix = 'http://this.prefix?redirect_uri='
link = 'http://google.com'
// Expected Output
http://this.prefix?redirect_uri=http://google.com
// Getting Output
http://this.prefix?redirect_uri=http://this.prefix?redirect_uri=http://google.com
Вы можете видеть, что префикс повторяется.
I ' Я делюсь своим реальным кодом, так что вам, ребята, будет полезнее понять, что я хочу сказать.
let mailBody = `
<div dir="auto">
<a href="https://aabc.pagerduty.com/incidents">aabc.pagerduty.com</a>
<a href="https://aabc.pagerduty.com/incidents/P9X3024">[FIRING:1] TooManyContainerRestarts (http 10.0.95.123:8080 kube-state-metrics newton newton/prometheus-operator-prometheus prometheus-operator-kube-state-metrics infra critical) </a></p>
<a href="https://aabc.pagerduty.com/incidents/P9X3024">View Incident</a>
<p>URGENCY </p>
</div>
`;
const links = [
'https://aabc.pagerduty.com/incidents',
'https://aabc.pagerduty.com/incidents/P9X3024'
]
const processTrackingLinks = (linkArray, mailBody) => {
const prefix = 'https://test.io?redirect_uri=';
// const mapping = [];
for (let i=0; i < linkArray.length; i++){
const replacer = new RegExp(linkArray[i], 'g')
mailBody = mailBody.replace(replacer, prefix + linkArray[i]);
}
return mailBody;
};
mailBody = processTrackingLinks(links, mailBody);
console.log(mailBody);
Если вы понимаете, почему это происходит, я делаю что-то не так, или это это проблема, просто дайте мне знать.
Любое разрешение будет оценено. :)