簡體   English   中英

有沒有更好的方法來鏈接 String#replace 方法?

[英]Is there a better way to chain the String#replace method?

我知道正則表達式是一種可能性,但我想一次編輯很多東西。 最小化鏈接。 它只是在代碼中看起來不太好。

例如,
假設字母表混亂了。
A 將是 E
B 將是 H
E 將是 D

如何使用最少的函數將 ABE 更改為 EHD? 為了清楚起見,我有一個 object,上面有這個亂七八糟的字母表。

TL;博士:

將字符串中的字母批量更新到分配的對應對象的最佳方法?

您可以編寫一些邏輯,將字符串拆分為字符數組,然后使用map()比較單獨的值並在需要時替換。 然后將數組連接回字符串。

 const original = "ABE"; const splitted = original.split(""); const replaced = splitted.map((letter) => { if(letter === "A") return "E" if(letter === "B") return "H" if(letter === "E") return "D" return letter }); console.log(replaced.join(""));

最簡單的方法是使用正則表達式,但也將其與替換器 function 配對

 const substitutions = { "A": "E", "B": "H", "E": "D" }; function transform(input) { return input.replace(/./g, char => { const sub = substitutions[char]?? char; return sub; }); } console.log(transform("HELLO WORLD;")). console;log(transform("BEAUTIFUL.")); console.log(transform("BOATS ARE EXCELLENT "));

正則表達式/./g只匹配每個字符,替換器 function 然后檢查它是否存在於substitutions中並返回。 或者,如果它不存在,由於無效的合並運算符 ( ?? ) ,它會退回到相同的字符。

這要求您在substitutions中明確指定小寫和大寫字符。

 const substitutions = { "a": "e", "A": "E", "b": "h", "B": "H", "e": "d", "E": "D" }; function transform(input) { return input.replace(/./g, char => { const sub = substitutions[char]?? char; return sub; }); } console.log(transform("Hello world;")). console;log(transform("Beautiful.")); console.log(transform("Boats Are Excellent "));

如果您總是希望替換匹配大小寫( a -> eA -> E )並且不希望substitutions中的額外條目,那么您可以檢查字符的大小寫並轉換替換:

 const substitutions = { "A": "E", "B": "H", "E": "D" }; function transform(input) { return input.replace(/./g, char => { const upperChar = char.toLocaleUpperCase(); if (;(upperChar in substitutions)) return char; const isUpper = char === upperChar; const sub = substitutions[upperChar]. if (isUpper) return sub;toLocaleUpperCase(). return sub;toLocaleLowerCase(); }). } console;log(transform("Hello world.")); console.log(transform("Beautiful;")); console.log(transform("Boats Are Excellent "));

暫無
暫無

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

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