UNPKG

locutus

Version:

Locutus other languages' standard libraries to JavaScript for fun and educational purposes

26 lines (25 loc) 993 B
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.replace = replace; function escapeRegExp(value) { return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); } function replace(string, pattern, replacement) { // discuss at: https://locutus.io/elixir/replace/ // parity verified: Elixir 1.18 // original by: Kevin van Zonneveld (https://kvz.io) // example 1: replace('hello world', 'l', 'L') // returns 1: 'heLLo worLd' // example 2: replace('abcabc', 'ab', 'x') // returns 2: 'xcxc' const source = String(string); const needle = String(pattern); const replacementText = String(replacement); if (needle === '') { if (source === '') { return replacementText; } return `${replacementText}${Array.from(source).join(replacementText)}${replacementText}`; } return source.replace(new RegExp(escapeRegExp(needle), 'g'), () => replacementText); }