Plain grep doesn't understand \s or parentheses.(*) You want grep -P if available, or grep -E/egrep and write \s out as [ ^I] (where ^I is Tab; grep without -P doesn't understand \t either). Additionally, with double quotes some shells will process the \s and leave behind just s; you should always use single quotes with regexes from the shell, except for when you actually need to interpolate a variable (e.g. something like '^\s*'"$foo"'\s+\(', switching quoting in mid-parameter).
The alternatives in your second example (again, with -P and single quoting instead of double) do the same thing. The former is technically better because grep won't backtrack as much, but practically it won't matter.
(*) pedantry: backslashed parens will work, again requiring single quoting so the shell doesn't eat the backslashes. egrep is usually easier.