typescript 替换字符串中两个特定字符之间的单词

flseospp  于 2023-04-22  发布在  TypeScript
关注(0)|答案(3)|浏览(252)

我有下面的字符串,我想替换“[”和“]”之间的字符:

text = "Lorem ipsum dolor sit amet, [Link 1|www.example1.com] sadipscing elitr, sed diam nonumy [Link 2|www.example2.com] tempor invidunt ut labore et [Link 3|www.example3.com] magna"

我们的目标是:

newText = "Lorem ipsum dolor sit amet, <a href=www.example1.com target="_blank">Link 1</a> sadipscing elitr, sed diam nonumy <a href=www.example2.com target="_blank">Link 2</a> tempor invidunt ut labore et <a href=www.example3.com target="_blank">Link 3</a> magna"

下面的代码只替换第一个链接(链接1),但链接2和3没有任何效果

const urlTextChain = text.substring(text.indexOf("[") + 1, text.indexOf("]"));

if (urlTextChain) {
  const textUrl = urlTextChain.substring(0, urlTextChain.lastIndexOf("|"));
  const url = urlTextChain.substring(urlTextChain.indexOf("|") + 1);
  const link = "<a href=" + url + " target=" + '"_blank"' + ">" + textUrl + "</a>";
  let newText = text.replace(urlTextChain, link);
  newText = newText.replace('[', '');
  newText = newText.replace("]", '');
  return newText;
}
qqrboqgw

qqrboqgw1#

MDN String.prototype.replaceMDN RegExp
可以使用RegExp进行替换。
p1对应于第一个括号,p2是对应于第二个括号的值。

const text =
  'Lorem ipsum dolor sit amet, [Link 1|www.example1.com] sadipscing elitr, sed diam nonumy [Link 2|www.example2.com] tempor invidunt ut labore et [Link 3|www.example3.com] magna'

const convertLinkFromText = (txt) => {
  const reg = new RegExp(/\[(.*?)\|(.*?)\]/, 'gi')

  return txt.replace(reg, (match, p1, p2) => {
    return `<a href="${p2}" target="_blank">${p1}</a>`
  })
}

const newText = convertLinkFromText(text)

console.log(newText)
5hcedyr0

5hcedyr02#

这是正则表达式的一个典型例子,请改为:

const orig = 'Lorem ipsum dolor sit amet, [Link 1|www.example1.com] sadipscing elitr, sed diam nonumy [Link 2|www.example2.com] tempor invidunt ut labore et [Link 3|www.example3.com] magna';

const final = orig.replace(/\[([^|\]]+)\|([^\]]+)\]/g, '<a href="$2" target="_blank">$1</a>');

将决心:

Lorem ipsum dolor sit amet, <a href="www.example1.com" target="_blank">Link 1</a> sadipscing elitr, sed diam nonumy <a href="www.example2.com" target="_blank">Link 2</a> tempor invidunt ut labore et <a href="www.example3.com" target="_blank">Link 3</a> magna
zf9nrax1

zf9nrax13#

您可以使用replaceAll方法,它使用与replace方法相同的语义。

相关问题