OK regex question , how to extract a character NOT between two characters, in this case brackets.
I have a string such as: word1 | {word2 | word3 } | word 4
Depends on the language/implementation you're using, but...
\|(?![^{]*})
This matches a pipe that is not followed by a }
except in the case that a {
comes first.
The (?! ... )
is known as a negative lookahead assertion. This is easier to understand if we start with a positive lookahead assertion:
\|(?=[^{]*})
The above only matches a pipe that is followed by a }
without encountering a {
first. When you negate that by replacing the =
with a !
, the match is now only successful if there's no way for the positive case to be true (also known as the complement).
On refiddle.com set to JavaScript, try using this pattern
/\|(?![^{]*})/g
with this text
word1 | {word2 | word3 } | word 4 | word 4 | {word2 | word3 }
This should match all of the Pipe symbols that are not inside {}.