It is possible for the first case
ClearAll@selectN
selectN[predicate_][n_ : Infinity] := Select[#, predicate, n] &
Names["System`*Values"] //
selectN[StringMatchQ[StartOfString ~~ "Down" | "Own" | "Sub" | "Up" ~~ "Values"]][]
Names["System`*Values"] //
selectN[StringMatchQ[StartOfString ~~ "Down" | "Own" | "Sub" | "Up" ~~ "Values"]][2]
You can use this to write select functions for different predicates e.g.
valuesSelect =
selectN[StringMatchQ[StartOfString ~~ "Down" | "Own" | "Sub" | "Up" ~~ "Values"]];
Names["System`*Values"] // valuesSelect[3]
unitDeterminantSelect = selectN[Det[#] == 1 &];
Tuples[{0, 1}, {3, 3}] // unitDeterminantSelect[3]
But if you need to be able to return all matches then maybe this is better
ClearAll@selectN
selectN[predicate_, n_ : Infinity] := Select[#, predicate, n] &
Names["System`*Values"] //
selectN[StringMatchQ[StartOfString ~~ "Down" | "Own" | "Sub" | "Up" ~~ "Values"]]
Names["System`*Values"] //
selectN[StringMatchQ[StartOfString ~~ "Down" | "Own" | "Sub" | "Up" ~~ "Values"], 2]