簡體   English   中英

如何一次替換字符串的多個不同部分?

[英]How do I replace multiple different parts of a string at once?

所以,我有一個字符串,它是一系列從 1 到 6 的數字。 根據所討論的數字,我想用不同的代碼替換每個。 這是針對 Discord 機器人的,因此六個數字中的每一個都應替換為不同的 Discord 表情符號代碼。 我試過使用 string.replace 鏈,但是,由於這些表情符號代碼包含數字,替換開始堆疊在彼此之上並替換替換(我知道那是滿嘴的。)這完全破壞了代碼。

這是一個示例鏈:

1 2 1 4 6 

這是如何替換數字的索引:

1 = <:attr1:710526292784578581>
2 = <:attr2:710526292721664142>
3 = <:attr3:710526292642103398>
etc.

所以理想情況下它應該變成這樣的字符串,而不是因為替換鏈正在吞噬自己而最終混亂和混合。

<:attr1:710526292784578581> <:attr2:710526292721664142> <:attr3:710526292642103398>

我怎樣才能基本上一次完成這些替換,以便它們影響字符串中的項目,而不會開始相互影響? 答案將不勝感激!

編輯:這是我自己對替換鏈的嘗試,它返回了一個錯誤的混亂。

var attribEmoji = attribResult.join(" ").replace(/1/g, "<:attr1:710526292784578581>").replace(/2/g, "<:attr2:710526292721664142>").replace(/3/g, "<:attr3:710526292642103398>");

你可以這樣做:

 str = '1 2 1 4 6'; replacement = { '1': '<:attr1:710526292784578581>', '2': '<:attr2:710526292721664142>', '3': '<:attr3:710526292642103398>', '4': '<:attr4:710526292642103772>', '5': '<:attr5:710526292642103008>', '6': '<:attr6:710526292642105566>' } newStr = ''; for(var i = 0; i < str.length; i++) { newStr += replacement[str.charAt(i)]? replacement[str.charAt(i)]: str.charAt(i) } console.log(newStr)

在數字鏈中,如果每個數字后面都有一個空格,而替換數字沒有,那么這是一個很容易解決的問題。 創建一個圖標數組並循環遍歷它們,用正確的代碼用空格替換索引。

 var emojis = []; emojis[1] = "<:attr1:710526292784578581>"; emojis[2] = "<:attr2:710526292721664142>"; emojis[3] = "<:attr3:710526292642103398>"; var chain = "1 2 3 "; emojis.forEach(function(i,v){ chain = chain.replace(v + " ",i + " "); }); console.log(chain);

const replaceMultiple = input => {
  const mapping = {
    '1': '<:attr1:710526292784578581>',
    '2': '<:attr2:710526292721664142>',
    '3': '<:attr3:710526292642103398>',
  }

  return input
    .split(' ')
    .map(inputNum => mapping[inputNum])
    .join(' ')
}

用法

replaceMultiple('1 3 2')
// '<:attr1:710526292784578581> <:attr3:710526292642103398> <:attr2:710526292721664142>'

使用replace的回調參數:

 // Define the replacements as key/value pairs: let map = { "1": "<:attr1:710526292784578581>", "2": "<:attr2:710526292721664142>", "3": "<:attr3:710526292642103398>", // add as needed... }; // Create a regular expression from the keys: let regex = new RegExp(`[${Object.keys(map).join("")}]`, "g"); // sample input let attribResult = [1,2,1,3]; // Perform the substitutions var attribEmoji = attribResult.join(" ").replace(regex, m => map[m]); console.log(attribEmoji);

您可以使用 object 獲取相關值和替換值,然后搜索一個數字並替換為 object 中的值。

 var replacements = { 1: '<:attr1:710526292784578581>', 2: '<:attr2:710526292721664142>', 3: '<:attr3:710526292642103398>', 4: '<:attr4:710526292642103398>', 5: '<:attr5:710526292642103398>', 6: '<:attr6:710526292642103398>' }, string = '1 2 1 4 6', replaced = string.replace(/[1-6]/g, v => replacements[v]); console.log(replaced);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM