My input is a string, I want to validate that there is only one first-level block of code.
Examples :
{ abc } TRUE
{ a { bc }
EDIT: I started writing the answer before JavaScript was specified. Will leave it as for the record as it fully explains the regex.
In short: In JavaScript I cannot think of a reliable solution. In other engines there are several options:
For solutions 2 (which anyhow won't work in JS either), I'll refer you to the example in this question
In Perl, PCRE (e.g. Notepad++, PHP, R) and the Matthew Barnett's regex
module for Python, you can use:
^({(?:[^{}]++|(?1))*})$
The idea is to match exactly one set of nested braces. Anything more makes the regex fail.
See what matches and fails in the Regex Demo.
Explanation
^
anchor asserts that we are at the beginning of the string{
match the opening brace(?: ... )*
zero or more times, we will...[^{}]++
match any chars that are not {
or }
|
(?1)
repeat the expression of subroutine 1}
match closing brace $
anchor asserts that we are at the end of the string. Therefore,