Recursive string substitution
Python 2, 43 bytes
lambda s,*l:eval('s'+'.replace(*l)'*len(s))
Try it online!
Evaluates a string of the form
s.replace(*l).replace(*l).replace(*l) ...
To reach a fixed point if one exists, it suffices to do replacements equal to the length of the original string.
05AB1E, 2 bytes
`:
Try it online!
Explanation
` # split input to stack
: # replace (until string doesn't change)
This could be :
for 1 byte if we didn't have to deal with empty strings.
ES6 (Javascript), 47, 43 bytes
- Saved 4 bytes using currying (Thanks @Neil !)
Golfed
c=>b=>R=a=>(x=a.split(b).join(c))==a?x:R(x)
Try It
Q=c=>b=>R=a=>(x=a.split(b).join(c))==a?x:R(x)
function doit() {
console.log(Q(C.value)(B.value)(A.value));
}
A: <input type="text" value="abaaba" id="A"/> B: <input type="text" value="aba" id="B"/> C: <input type="text" value="ab" id="C"/> <input type="submit" onclick="doit();" value="REPLACE"/>