typeof to determine if pattern is a string or a regular expression.pattern is a string, use it as the match.RegeExp constructor to create a new regular expression using the RegExp.source of the pattern and adding the 'g' flag to it. Use String.prototype.match() and Array.prototype.slice() to get the last match, if any.String.prototype.lastIndexOf() to find the last occurence of the match in the string.String.prototype.slice() and a template literal to replace the matching substring with the given replacement.const replaceLast = (str, pattern, replacement) => { const match = typeof pattern === 'string' ? pattern : (str.match(new RegExp(pattern.source, 'g')) || []).slice(-1)[0]; if (!match) return str; const last = str.lastIndexOf(match); return last !== -1 ? `${str.slice(0, last)}${replacement}${str.slice(last + match.length)}` : str; };
replaceLast('abcabdef', 'ab', 'gg'); // 'abcggdef' replaceLast('abcabdef', /ab/, 'gg'); // 'abcggdef' replaceLast('abcabdef', 'ad', 'gg'); // 'abcabdef' replaceLast('abcabdef', /ad/, 'gg'); // 'abcabdef'
Subscribe to get resources directly to your inbox. You won't receive any spam! ✌️