Parse a nested parentheses
Retina 0.8.2, 32 31 bytes
^(\s*\()+(?&lt;-1&gt;\s*\))+(?(1)$.)


Try it online! Link includes test cases. Returns the original string on error. Considers the given control characters as white space, plus any Unicode characters (such as space) in the Separator group, plus U+0085. If only the minimal white space is desired, this can be achieved by prefixing e`. Explanation:
^(\s*\()+

Match some open parentheses at the start of the string.
(?&lt;-1&gt;\s*\))+

Match some close parentheses.
(?(1)$.)

Check that the same number of open and close parentheses were matched.


Delete the matched parentheses.
Alternative solution, also 31 bytes:
r`^(?&lt;-1&gt;\s*\()+(\s*\))+(.*)
$2

Try it online! Link includes test cases. If only the minimal white space is desired, this can be achieved by prefixing e. Explanation:
r`

Start matching at the end of the string and work backwards (like a lookbehind would).
(.*)

Match as much result as possible.
(\s*\))+

Match some close parentheses.
^(?&lt;-1&gt;\s*\()+

Match the open parentheses at the start of the string. The number of close parentheses must be at least as many as the number of open parentheses for the balancing group to succeed, but it can't be more because the (.*) ensures that as few close parentheses are matched as possible.
$2

Keep everything except the matched parentheses.
Previous 32-byte solution that returns the empty string on error:
1!`(?&lt;=^(?&lt;-1&gt;\s*\()+(\s*\))+).*

Try it online! Link includes test cases. If only the minimal white space is desired, this can be achieved by prefixing e. Explanation:
1!`

Output the matched part of the first match.
(?&lt;=^(?&lt;-1&gt;\s*\()+(\s*\))+)

Ensure that the match starts after balanced parentheses. Note that this is a lookbehind, so the match is processed right-to-left - the )s are matched first, then a ( can be matched for each ). There can't be too many )s because the lookbehind would have matched earlier, meaning that this is no longer the first match.
.*

Match the rest of the string. This actually counts as part of the match, and therefore becomes the resulting output.