Each time you use {{plural:...}} the regexp is executed against all the keys in rules dictionary.
I think it's a good place to introduce a caching layer during first run.
Then you only need to access an array item by its key, which would preferably be a language id.
The memory overhead shouldn't be big because you will keep the references to rule functions in the cache.