I'd been wondering for some time if I could do this via RegEx, and I was working on it when you originally posted this function.
Code: Select all
q::
;repeat a string between 1 and 19 times
MsgBox, % RegExReplace(10**1-1,".","a")
MsgBox, % RegExReplace(10**3-1,".","abc ")
MsgBox, % RegExReplace(10**5-1,".","a")
MsgBox, % RegExReplace(10**10-1,".","a")
MsgBox, % RegExReplace(A_Now,".","a") ;14 times
MsgBox, % RegExReplace(10**15-1,".","a")
MsgBox, % RegExReplace(10**19-1,".","a")
;works up to 20 times with extra round brackets
;(we reach the limit of how big a number AHK can handle)
MsgBox, % RegExReplace(10**(20-1),".","a")
MsgBox, % RegExReplace(A_Now A_Now,".","a") ;28 times
MsgBox, % RegExReplace(10**9,".","=====") ;50 equals signs
;turn 14 chars into 10 strings (turn lead into gold)
;if have seen 9 chars already, replace remaining chars with string
MsgBox, % vText := RegExReplace(A_Now,"(?<=^.{9}).*|.","a")
MsgBox, % StrLen(vText)
MsgBox, % vText := RegExReplace(A_Now,"(?<=^.{9}).*|.","abc ")
MsgBox, % StrLen(vText)
;==============================
;using the fact that RegExReplace can operate on blanks (e.g. padding each character):
vText := "abcdefghij"
MsgBox, % RegExReplace(vText,"","_") ;left/middle/right
MsgBox, % RegExReplace(vText,"(?<=.)(?=.)","_") ;middle
MsgBox, % RegExReplace(vText,"(?=.)","_") ;left/middle
MsgBox, % RegExReplace(vText,"(?<=.)","_") ;middle/right
MsgBox, % vText := RegExReplace(A_Now,"(?<=.{8}).*|.","a")
MsgBox, % StrLen(vText)
MsgBox, % vText := RegExReplace(A_Now,"(?<=.{8}).*|.","abc ")
MsgBox, % StrLen(vText)
;turn 14 into 15
MsgBox, % vText := RegExReplace(A_Now,".|","a")
MsgBox, % StrLen(vText)
;turn 14 into 29
MsgBox, % vText := RegExReplace(A_Now,"|.","a")
MsgBox, % StrLen(vText)
;turn 14 into 28
MsgBox, % vText := RegExReplace(A_Now,"(?=.)|.","a")
MsgBox, % StrLen(vText)
MsgBox, % vText := RegExReplace(A_Now,"(?<=.)|.","a")
MsgBox, % StrLen(vText)
;turn 14 into 27
MsgBox, % vText := RegExReplace(A_Now,"(?<=.)(?=.)|.","a")
MsgBox, % StrLen(vText)
return
I might do some benchmark tests at some point. Cheers.