UNPKG

@feugene/mu

Version:

Helpful TS utilities without dependencies

58 lines (48 loc) 1.44 kB
import pregQuote from '~/utils/pregQuote' import type { TextNumber } from '~/internal/types' /** * Replace all entries in string according to map * * @param {string} str * @param {{}} map * @return {string} */ export function replaceByTemplate(str: string, map: Record<string, TextNumber>): string { let cmpString = '', offset = 0, find = -1, addString = '' for (let index = 0; index < str.length; index++) { cmpString += '0' } for (const fr in map) { offset = 0 const val = String(map[fr]) while ((find = str.indexOf(fr, offset)) !== -1) { if (Number.parseInt(cmpString.slice(find, find + fr.length)) !== 0) { offset = find + 1 continue } for (let k = 0; k < val.length; k++) { addString += '1' } cmpString = cmpString.slice(0, find) + addString + cmpString.slice(find + fr.length, cmpString.length) str = str.slice(0, find) + val + str.slice(find + fr.length, str.length) offset = find + val.length //+ 1 addString = '' } } return str } export default function strtr(str: string, from: string | Record<string, TextNumber>, to?: string) { if (typeof from === 'object') { return replaceByTemplate(str, from) } if (!to) { return str } for (let index = 0; index < from.length; index++) { str = str.replace(new RegExp(pregQuote(from.charAt(index)), 'g'), to.charAt(index)) } return str }