Have your text editor change all occurrences of \left
to either \xleft
or \yleft
, depending on which of these two methods you prefer. Then, any time a \left
is invoked, an \fbox
showing $\big#1\Big#1\bigg#1\Bigg#1$
is laid to the left of the construct.
This is a flag for you to do something about it. You can visually see if any of the 4 "big" constructs are the right size, and either edit that \xleft
or \yleft
to either the appropriate big delimiter of change it back to \left
if none of them work.
The only difference between \xleft
and \yleft
is that the \yleft
will \smash
the \fbox
. This is useful if nested \left
ing occurs, otherwise the \fbox
alters the natural size of the outer \left
s. The downside of \yleft
is that it allows overlap to occur, which can be a bit confusing until the resolution is made.
\documentclass{article}
\def\xleft#1#2\right{
\fbox{$\big#1\Big#1\bigg#1\Bigg#1$}\left#1#2\right}
\def\yleft#1#2\right{
\smash{\fbox{$\big#1\Big#1\bigg#1\Bigg#1$}}\left#1#2\right}
\begin{document}
Here is the \verb|\yleft| method which smashes the test box.
\[
y = \yleft( x^2 + 3\right)
\]
And now for the next test:
\[
y = \yleft(\frac{a}{b}\right)
\]
Finally:
\[
y = 3\yleft(\frac{\yleft( x^2 + 3\right)}{b}\right)
\]
Here is the \verb|\xleft| method which does not smash the test box.
\[
y = \xleft( x^2 + 3\right)
\]
And now for the next test:
\[
y = \xleft(\frac{a}{b}\right)
\]
Finally:
\[
y = 3\xleft(\frac{\xleft( x^2 + 3\right)}{b}\right)
\]
\end{document}

For a dimension-based approach, invoke \basesizes
at the beginning of the document to see the vertical dimension of \big
, \Big
, \bigg
and \Bigg
. Then change all \left
to \zleft
to reveal the required size for the given construct.
\documentclass{article}
\usepackage{scalerel}
\def\zleft#1#2\right{
\smash{\ThisStyle{\setbox0=\hbox{$\SavedStyle\left#1#2\right.$}%
\edef\tmp{\the\dimexpr\ht0+\dp0\relax}%
\fbox{\expandafter\truncate\expandafter{\tmp}}}}%
\left#1#2\right}
\newcommand\truncate[1]{\truncateaux#1\relax}
\def\truncateaux#1.#2\relax{#1pt}
\newcommand\basesizes{%
\noindent big: \setbox0=\hbox{\big(}\the\dimexpr\ht0+\dp0\relax\par
\noindent Big: \setbox0=\hbox{\Big(}\the\dimexpr\ht0+\dp0\relax\par
\noindent bigg: \setbox0=\hbox{\bigg(}\the\dimexpr\ht0+\dp0\relax\par
\noindent Bigg: \setbox0=\hbox{\Bigg(}\the\dimexpr\ht0+\dp0\relax\par
}
\begin{document}
\basesizes
Here is the \verb|\zleft| method which smashes the test box.
\[
y = \zleft( x^2 + 3\right)
\]
And now for the next test:
\[
y = \zleft(\frac{a}{b}\right)
\]
Finally:
\[
y = 3\zleft(\frac{\zleft( x^2 + 3\right)}{b}\right)
\]
\end{document}

\left(...\right)
should not consider accents such as\tilde
etc., and I am getting tired of fighting the side-effects of\smash
every time I useU
and\tilde{U}
, for example. Compare$\left(U\right. \left(\tilde{U}\right.$