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! ✌️