You don't need lookbehind:
var Tokens = rematch( "\{\w*(?=\})" , Arguments.Str );
for ( var i = 1 ; i LTE ArrayLen(Tokens) ; i++ )
Tokens[i] = Tokens[i].substring(1);
return Tokens;
And that code should also give you a clue as to the most likely cause of the code breaking, in that you've probably got it in a function in a persisted component, but (without any scoping) everything is going in the component's variables scope, and thus it's not thread-safe and - with multiple calls under load - the variables involved are liable to get corrupted.
This is a general issue you should be looking for throughout the code - generally the first assignment for every variable inside a function should be prefixed with either the var
keyword (or explicitly the local.
scope) to ensure it it local to that function and not global the the component. (Except of course in the instances when a global variable is what is desired.)
Oh, and if you ever do actually want/need to use lookbehind in CF, I've made cfRegex, a library that wraps Java's more powerful regex engine, providing support for lookbehind (with limited-width), and with a (hopefully) easy to use and consistent set of functions for interacting with it.