I don't think there's a simple function, no. regexp_replace
only replaces one value at a time, so to replace 3 values in a string, you need to loop over it 3 times.
It's possible to split the strings, use a connect by
loop to replace each value, and then put the pairs back together, but it is a bit awkward. Example:
with t as (select '1=101,2=John,3=43' as pairs, 'ID,Name,Age' as labels from dual)
select
listagg(
regexp_replace(regexp_substr(pairs, '[^,]+', 1, level),
'\d+(.+)',
regexp_substr(labels, '[^,]+', 1, level) || '\1')
,',')
from t
connect by regexp_substr(pairs, '[^,]+', 1, level) is not null
See the link above for how to modify this query for a table with multiple rows and a unique key ID.