UNPKG

nhb-toolbox

Version:

A versatile collection of smart, efficient, and reusable utility functions, classes and types for everyday development needs.

44 lines (43 loc) 1.74 kB
import { isString } from '../guards/primitives.js'; import { trimString } from './basics.js'; export const replaceAllInString = (input, find, replace) => { const trimmedString = trimString(input); const regex = isString(find) ? new RegExp(find, 'g') : new RegExp(find, find?.flags.includes('g') ? find?.flags : find?.flags + 'g'); return trimmedString?.replace(regex, replace); }; export const slugifyString = (input) => { return trimString(normalizeString(input)) ?.toLowerCase() ?.replace(/[^a-z0-9]+/g, '-') ?.replace(/^-+|-+$/g, ''); }; export const maskString = (input, options) => { const { start = 1, end = 1, maskCharacter: maskChar = '*' } = options || {}; const trimmedString = trimString(input); if (trimmedString?.length <= start + end) { return maskChar?.repeat(trimmedString?.length); } return (trimmedString.slice(0, start) + maskChar?.repeat(trimmedString?.length - start - end) + (end > 0 ? trimmedString.slice(-end) : '')); }; export const reverseString = (input) => { const trimmedString = trimString(input); return trimmedString?.split('')?.reverse()?.join(''); }; export function normalizeString(str) { return str?.normalize('NFD')?.replace(/[\u0300-\u036f]/g, ''); } export function extractEmails(str) { return str?.match(/[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/g) || []; } export function extractURLs(str) { return str?.match(/https?:\/\/[^\s/$.?#].[^\s]*/g) || []; } export function formatUnitWithPlural(count, unit, withNumber = true) { const abs = Math.abs(count); const pluralized = abs === 1 ? unit : `${unit}s`; return withNumber ? `${count} ${pluralized}` : pluralized; }