Need help understanding how this JS code is generating UUID [duplicate]

I got this piece of code for generating UUID in case the browser doesn’t support crypto.randomUUID.

I need help understanding how this works. A step by step process would be much appreciated. Would also like to know the official term that is used to define this kind of process.

var random_string = (
    Math.random().toString(16) +
    Math.random().toString(16) +
    Math.random().toString(16) +
    Math.random().toString(16) +
    Math.random().toString(16)
  ).replace(/0./g, ""),
  random_y_bit = [8, 9, "a", "b"][~~(Math.random() * 4)],
  template_uuid = /.*(........)..(....)..(...)..(...)..(............).*/,
  replace_pattern = "$1-$2-4$3-" + random_y_bit + "$4-$5";

return random_string.replace(template_uuid, replace_pattern);