Попробуйте использовать следующий шаблон регулярных выражений:
\b(?=[^/]*\d)\w{18,24}\b
Демо
Объяснение регулярного выражения:
\b match a word boundary (most likely /)
(?=[^/]*\d) then assert that a digit follows in the next segment of the URL,
without passing /
\w{18,24} match 18 to 24 word characters
\b match another word boundary
Вот строчная строка в Java с использованием этого регулярного выражения:
String url = "https://test-gateway.com/newUserCustomerOrder/5e8f39f65bd0920012e40a14";
String orderId = url.replaceAll(".*\\b((?=[^/]*\\d)\\w{18,24})\\b.*", "$1");
System.out.println(orderId);
Это печатает:
5e8f39f65bd0920012e40a14