Umm, that is not a good fix.
What it does, in essence, is finding any of the individual characters inside the set. The entire part between the square brackets means “any single one of the characters inside” (the OR | does not work inside a [character set] as such, it merely adds the | character to the allowed ones). You can see it indeed doesn't work if you check your example
Afghanistan War 1919–1922, 169, 171
— all it does is it finds all digit strings that are preceded by a space — or by a comma, quote, colon, or pipe, as you can see if you insert a pipe anywhere inside a string of digits.
By the way, the reason your first try failed:
(?<=,” |, |: )d+
is because Lookbehind does not work with strings of different length, they all have to be of the same length. For the same reason you cannot use repeating codes (+, *, and ?) inside a Lookbehind — I guess it would make poor old InDesign work too hard, going over all possible combinations.
But you can work around this by making them two Lookbehinds:
((?<=,” )|(?<=, |: ))d+
The first one checks for “comma-quote-space”, the second one for “comma-space” or “colon-space”. They are grouped inside parentheses with an OR bar, so if one doesn't work, the other takes over.