regex 替换字符串中的精确用户名

qfe3c7zg  于 2023-08-08  发布在  其他
关注(0)|答案(2)|浏览(87)

我正在尝试将字符串中的事件替换为其他内容。假设我有以下句子:

Hi @john.doe, i see @john has tagged you

字符串
我在这句话里有两个用户名:@john@john.doe中的至少一个。我想把它变成这样一句话:

Hi @john.doe(1), i see @john(2) has tagged you


我是这样做的:

Text = text.replace(username, ‘${username}(${userId})’);


问题是,当我遍历字符串中的所有用户名并对每个用户名进行替换时,因为@john是一个用户名,但也是另一个用户名的一部分,所以它不起作用。
如何在js中替换字符串中的单词?

lskq00tm

lskq00tm1#

您可以迭代用户名,如果它们以所需的格式存在,则替换它们:

let str = 'Hi @john.doe, i see @john has tagged you, reply back to @john.';
const usernames = new Map([['john.doe', 1], ['john', 2]]);

[...usernames.entries()].forEach(([u, i]) => {
  const reg = new RegExp(`@${u}(?![a-z0-9_.-])|@${u}(?=\.$)`, 'g');
  if (str.match(reg)) {
    str = str.replace(reg, `${u}(${i})`);
  }
});

console.log(str);

字符串

zf2sa74q

zf2sa74q2#

你能试着按长度降序排列你的用户名,然后尝试替换/应用给定字符串中的用户名吗?这将解决你的问题。只要确保在替换值时,如果ID已经附加到用户名,则跳过这些。试试这个,让我知道这是否对你有效。

相关问题