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
JavaScript
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;
}