簡體   English   中英

如何用JavaScript中的字符串替換第一次出現的字符?

[英]How to replace the first occurrence of a character with a string in JavaScript?

我有一個字符串,其中包含應該替換一次的字符(首次出現時)。

這些字符是:

  • L =>將替換為講座名稱
  • N =>將替換為名稱
  • D =>將替換為日期

輸入示例:

L_N_L_D

期望的結果 (注意只替換第一個L ):

Math_Ex01_L_2018-10-05

我當前的代碼 (示例簡化):

let res = file_string.replace(/L|N|D/, x => {
  switch (x) {
    case 'L': return lecture;
    case 'N': return name;
    case 'D': return date;
    default: return x;
  }
});

我得到的是這個:

Math_L_N_D

如果我將正則表達式更改為/L|N|D/g則第二個L也將被替換,這不是我想要的。

怎么能實現呢?

回答你的一般問題“只替換第一次出現的角色”,你可以這樣做:

 var lecture = "Math"; var name = "Ex01"; var date = "2018-10-05"; var found = {}; var file_string = "L_N_L_D"; var filename_result = file_string.split("").map(function (character) { if (!found[character]) { found[character] = true; switch (character) { case "L": return lecture; case "N": return name; case "D": return date; } } return character; }).join(""); console.log(filename_result); 

您應該解釋file_string奇怪格式來自file_string 還有其他類似的用例嗎? 或者這僅僅是這個具體的例子? 了解原始要求會有很大幫助。

如果file_string應該是可配置的格式字符串,那么應該對其進行改進。 作為要替換的占位符的序列應該(或必須 )與文字不同,例如:

var filename_format = "{L}_{N}_L_{D}";

將替換放在地圖中,一旦替換,將map[x]設置為x

 let lecture = "Math"; let name = "Ex01"; let date = "2018-10-05"; let repl = { 'L': lecture, 'N': name, 'D': date }; let file_string = "L_N_L_D" let result = file_string.replace(/[LND]/g, x => { let r = repl[x]; repl[x] = x; return r; }); console.log(result) 

除了解決手頭的問題,這也大大簡化了您的替換功能(例如,想想添加新的占位符)。

話雖這么說,你的問題的一個真正的解決方案是遵循@ marsze的建議並使用明確的占位符,如{...} ,在這種情況下,整個企業變得簡單

 repl = {...as before...}
 result = subject.replace(/{(.+?)}/g, (_, x) => repl[x])

暫無
暫無

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

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