es-toolkit
Version:
A state-of-the-art, high-performance JavaScript utility library with a small bundle size and strong type annotations.
64 lines (63 loc) • 1.39 kB
JavaScript
//#region src/string/deburr.ts
const deburrMap = new Map([
["Æ", "Ae"],
["Ð", "D"],
["Ø", "O"],
["Þ", "Th"],
["ß", "ss"],
["æ", "ae"],
["ð", "d"],
["ø", "o"],
["þ", "th"],
["Đ", "D"],
["đ", "d"],
["Ħ", "H"],
["ħ", "h"],
["ı", "i"],
["IJ", "IJ"],
["ij", "ij"],
["ĸ", "k"],
["Ŀ", "L"],
["ŀ", "l"],
["Ł", "L"],
["ł", "l"],
["ʼn", "'n"],
["Ŋ", "N"],
["ŋ", "n"],
["Œ", "Oe"],
["œ", "oe"],
["Ŧ", "T"],
["ŧ", "t"],
["ſ", "s"]
]);
/**
* Converts a string by replacing special characters and diacritical marks with their ASCII equivalents.
* For example, "Crème brûlée" becomes "Creme brulee".
*
* @param str - The input string to be deburred.
* @returns The deburred string with special characters replaced by their ASCII equivalents.
*
* @example
* // Basic usage:
* deburr('Æthelred') // returns 'Aethelred'
*
* @example
* // Handling diacritical marks:
* deburr('München') // returns 'Munchen'
*
* @example
* // Special characters:
* deburr('Crème brûlée') // returns 'Creme brulee'
*/
function deburr(str) {
str = str.normalize("NFD");
let result = "";
for (let i = 0; i < str.length; i++) {
const char = str[i];
if (char >= "̀" && char <= "ͯ" || char >= "⃐" && char <= "" || char >= "︠" && char <= "︯") continue;
result += deburrMap.get(char) ?? char;
}
return result;
}
//#endregion
export { deburr };