Let's do some "deciph4r4ng" In this challenge, your task is to decipher a string. Luckily, the algorithm is pretty simple: reading from left to right, each encountered digit N (0 to 9) must be replaced with the character which is N+1 positions before it.
Example
The input string &quot;Prog2am0in6&quot; would be decoded this way:

Hence, the expected output is &quot;Programming&quot;.
Clarifications and rules

The input string will contain ASCII characters in the range 32 - 126 exclusively. You can assume that it will never be empty.
The original deciphered string is guaranteed not to contain any digit.
Once a character has been decoded, it may in turn be referenced by a subsequent digit. For instance, &quot;alp2c1&quot; should be decoded as &quot;alpaca&quot;.
References will never wrap around the string: only previous characters can be referenced.
You can write either a full program or a function, which either prints or outputs the result.
This is code golf, so the shortest answer in bytes wins.
Standard loopholes are forbidden.

Test cases
Input : abcd
Output: abcd

Input : a000
Output: aaaa

Input : ban111
Output: banana

Input : Hel0o W2r5d!
Output: Hello World!

Input : this 222a19e52
Output: this is a test

Input : golfin5 3s24o0d4f3r3y3u
Output: golfing is good for you

Input : Prog2am0in6 Puz0les7&amp;1Cod74G4lf
Output: Programming Puzzles &amp; Code Golf

Input : Replicants 4re3lik448ny3oth8r5mac6in8.8T64y'r371it9376a1b5n1fit7or2a1h2z17d.
Output: Replicants are like any other machine. They're either a benefit or a hazard.
Java 7, 81 80 bytes

void a(char[]a){for(int i=0;++i&lt;a.length;)if(a[i]&gt;47&amp;a[i]&lt;58)a[i]=a[i-a[i]+47];}


Try it online!

Saved 1 byte thanks to Anders Tornblad. The first character cannot be a digit so it doesn't need to be checked meaning we can preincrement before checking our terminate condition.