get partial numbers from a string

Hi Everyone,

I have:
$val="QQ3_1899_CD4".
The output will be:
1899.

I did $val =~ /(\d+)/g; the output is 318994, then i use substr to get those 1899. This is not efficient.

Is any simple way, like just one line can do? Thanks

$ echo QQ3_1899_CD4 | awk -F _ '{print $2}'
1899