UNPKG

locutus

Version:

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

41 lines (40 loc) 1.23 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Replace = Replace; function Replace(s, old, newStr, n) { // discuss at: https://locutus.io/golang/strings/Replace // parity verified: Go 1.23 // original by: Kevin van Zonneveld (https://kvz.io) // note 1: n is the number of replacements. If n < 0, no limit on replacements. // example 1: Replace('oink oink oink', 'k', 'ky', 2) // returns 1: 'oinky oinky oink' // example 2: Replace('oink oink oink', 'oink', 'moo', -1) // returns 2: 'moo moo moo' s = s + ''; old = old + ''; newStr = newStr + ''; if (old === '') { return s; } if (n === 0) { return s; } if (n < 0) { // Replace all occurrences return s.replaceAll(old, newStr); } // Replace n occurrences let result = s; let count = 0; let pos = 0; while (count < n) { const idx = result.indexOf(old, pos); if (idx === -1) { break; } result = result.slice(0, idx) + newStr + result.slice(idx + old.length); pos = idx + newStr.length; count++; } return result; }