[英]JavaScript RegEx - replace first and last occurrence of a character
[英]How to replace the first occurrence of a character with a string in JavaScript?
我有一個字符串,其中包含應該替換一次的字符(首次出現時)。
這些字符是:
輸入示例:
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.