diff --git a/packages/core-js/modules/es.string.replace.js b/packages/core-js/modules/es.string.replace.js index c33906ba4903..27a439bec3b9 100644 --- a/packages/core-js/modules/es.string.replace.js +++ b/packages/core-js/modules/es.string.replace.js @@ -112,12 +112,12 @@ require('../internals/fix-regexp-well-known-symbol-logic')( break; default: // \d\d? var n = +ch; - if (n === 0) return ch; + if (n === 0) return match; if (n > m) { var f = floor(n / 10); - if (f === 0) return ch; + if (f === 0) return match; if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1); - return ch; + return match; } capture = captures[n - 1]; } diff --git a/tests/tests/es.string.replace.js b/tests/tests/es.string.replace.js index 61ceb8d72d67..5f08a7d02119 100644 --- a/tests/tests/es.string.replace.js +++ b/tests/tests/es.string.replace.js @@ -126,6 +126,10 @@ const run = assert => { assert.strictEqual('uid=31'.replace(/(uid=)(\d+)/, '$11A15'), 'uid=1A15', 'S15.5.4.11_A3_T3'); assert.strictEqual('abc12 def34'.replace(/([a-z]+)([0-9]+)/, (a, b, c) => c + b), '12abc def34', 'S15.5.4.11_A4_T1'); assert.strictEqual('aaaaaaaaaa,aaaaaaaaaaaaaaa'.replace(/^(a+)\1*,\1+$/, '$1'), 'aaaaa', 'S15.5.4.11_A5_T1'); + + // https://github.com/zloirock/core-js/issues/471 + assert.strictEqual('{price} Retail'.replace(/{price}/g, '$25.00'), '$25.00 Retail'); + assert.strictEqual('a'.replace(/(.)/, '$0'), '$0'); }; QUnit.test('String#replace regression', run);