This sadly is not so easy to do with regular expressions. I had a very similar problem in my first post to this board. To match only unquoted strings your pattern would have to keep count of quotes in front of potential matches, not counting the escaped quotes etc. If these lookbehind assertions were possible, they would be of variable length, as you don't know how many characters are in front of the potential match. Alas, variable length lookbehind assertions are impossible with common regex flavors, including Perl compatible regular expressions.
You will have to do some lexical analysis, splitting the string in tokens and looking at them one at a time. Tokens of interest for you are those within brackets and those with quotes. We keep the former and ignore the later. You'll need a regex to get these kinds of tokens:
"(?:""|\\"|[^"])*"|\[((?:[^\[\]]|\[\])*)\]
This pattern assumes you only use double quotes and escape them by either two double quotes ("") or a backslash (\"). I don't know why you match [[]] brackets, but I kept them in the pattern. Now ignore the matches starting with quotes and work with the others.
Depending on what exactly you want to do and the Delphi implementation you might want to use a callback function as I did in the end (in PHP though).