Это регулярное выражение проще:
/.*?__(.*?)\..*/
".*
" = абсолютно все. '?' то, что следует, означает не быть жадным, что приводит к .*?
сопоставлению всего до __
"__
" не имеет никакого значения в регулярном выражении, поэтому оно соответствует буквально
"(.*?)
" снова означает совпадать со всеми, но не жадничать. Это будет соответствовать номерам
"\.
" мы хотим сопоставить символ точки, но, поскольку в регулярном выражении он является значимым символом, нам нужно экранировать его, чтобы механизм регулярных выражений знал, что мы имеем в виду действительный символ, а не «что-либо»
".*
" соответствует чему угодно. Мы можем быть жадными, потому что мы прошли ту часть, о которой заботимся
Итак ...
".*?__
" соответствует всему перед числом, и
«\..*
» соответствует всему после