es_ wrote on 08 apr 2007 in comp.lang.javascript
:
And here even stranger:
jsa="444"
444
jsa=a.replace(/(\d+)/, Number(RegExp.$1)+1)
1
jsa=a.replace(/(\d+)/, Number(RegExp.$1)+1)
445
jsa=a.replace(/(\d+)/, Number(RegExp.$1)+1)
2
jsa=a.replace(/(\d+)/, Number(RegExp.$1)+1)
446
jsa=a.replace(/(\d+)/, Number(RegExp.$1)+1)
3
Not so strange,
as the Regexp object is only filled AFTER the replace has completed.
See:
<script type='text/javascript'>
a="444"
document.write('a = '+a+'<br>') //444
document.write('RegExp.$1 = '+RegExp.$1+'<br><br>') //empty
a=a.replace(/(\d+)/, Number(RegExp.$1)+1)
document.write('a = '+a+'<br>') //1
document.write('RegExp.$1 = '+RegExp.$1+'<br><br>') //444
a=a.replace(/(\d+)/, Number(RegExp.$1)+1)
document.write('a = '+a+'<br>') //445
document.write('RegExp.$1 = '+RegExp.$1+'<br><br>') //1
a=a.replace(/(\d+)/, Number(RegExp.$1)+1)
document.write('a = '+a+'<br>') //2
document.write('RegExp.$1 = '+RegExp.$1+'<br><br>') //445
a=a.replace(/(\d+)/, Number(RegExp.$1)+1)
document.write('a = '+a+'<br>') //446
document.write('RegExp.$1 = '+RegExp.$1+'<br><br>') //2
a=a.replace(/(\d+)/, Number(RegExp.$1)+1)
document.write('a = '+a+'<br>') //3
document.write('RegExp.$1 = '+RegExp.$1+'<br><br>') //446
</script>
Do anyone know why it is like this?
Yes, anyone does
And how to eliminate this effect?
Yes, do not use the Regexp object in a replace().
[The global Regexp object is ment to be used
AFTER the completion of the match function.]
<script type='text/javascript'>
a = "abc 444 abc"
document.write(a+'<br>') //abc 444 abc
a = a.replace(/(\d+)/, function(x,z){return +z +1})
document.write(a+'<br>') //abc 445 abc
a = a.replace(/(\d+)/, function(x,z){return +z +1})
document.write(a+'<br>') //abc 446 abc
a = a.replace(/(\d+)/, function(x,z){return +z +1})
document.write(a+'<br>') //abc 447 abc
a = a.replace(/(\d+)/, function(x,z){return +z +1})
document.write(a+'<br>') //abc 448 abc
</script>
--
Evertjan.
The Netherlands.
(Please change the x'es to dots in my emailaddress)