const regex = new RegExp('^(?:(?:(jdbc)\\:{1})?(?:(\\w+):/{2})?(?:([^@\\/?!\\"\\':#\\s]+(?::\\w+)?)@)?)?(?:([^@\\/?!\\"\\':#\\s]+(?::\\d+)?)(?=(?:$)|(?:/)))?(?:/([^@?!\\"\\':#\\s]*)(?=(?:$)|(?:\\?)))?(?:[?]([^#?!\\s]+))?\\S*$', 'gm')
const str = `postgresql://
postgresql://localhost
postgresql://localhost:5432
postgresql://localhost/mydb
postgresql://user@localhost
postgresql://user:secret@localhost
postgresql://user:secret@localhost:1533
postgresql://user:secret@localhost:1533/
postgresql://user:secret@localhost:1533/db?
postgresql://user::se:::cret@localhost::port
postgresql://user::secret@local::host::po::::rt/dd::b:::b
postgresql://other@localhost/otherdb?connect_timeout=10&application_name=myapp
postgresql://localhost/mydb?user=other&password=secret
jdbc:postgresql://localhost
jdbc:postgresql://other@localhost/otherdb?connect_timeout=10&application_name=myapp
jdbc:postgresql://other@localhost:5432/otherdb?connect_timeout=10&application_name=myapp
jdbc:postgresql://other:pass@localhost:5432/otherdb?connect_timeout=10&application_name=myapp
jdbc:postgresql://other:pass@localhost:5432/other/db?connect_timeout=10&application_name=myapp
jdbc:postgresql://other:pass@localhost:5432/other/db??connect_timeout=10&application_name=myapp
jdbc:postgresql://other::pass@localhost::5432/oth:erdb?connect_timeout=10&application_name=myapp
""''":::abc;
postgresql://127.0.0.1::5432
127.0.0.1::5432
localhost
user@localhost
user@localhost:1533
user@localhost:1533/db
user@localhost:1533/db?
user:secret@localhost
user:secret@localhost/db
user:secret@localhost/db?
user:secret@local:host/otherdb
user:secret@local:1533/othe1//db
user:secret@localhost/otherdb?connect_timeout=10&application_name=myapp
user:secret@localhost/other/db?connect_timeout=10&application_name=myapp
user:secret@localhost/other/db??connect_timeout=10&application_name=myapp
us""er:se::cret@loca''lhost
user:secret@local:1533/otherdb
jdbc:postgresql://user:secret@localhost:1533/otherdb
jdbc:postgresql://user:secret@@localhost:1533/otherdb
jdbc:postgresql://user:secret@localhost:1533/otherdb?
jdbc:postgresql://:secret@localhost:1533/otherdb?
jdbc:postgresql://user:secret@:1533/otherdb?
jdbc:postgresql://user:secret@localhost:1533/@otherdb?
jdbc:postgresql://user:secret@localhost/otherdb?connect_timeout=10&application_name=myapp
jdbc:postgresql://user:secret@localhost:1533/otherdb?connect_timeout=10&application_name=myapp
jd''bc:post""gresql://us..er:sec,,ret@localh++ost/ot+-herdb?connect_timeout=10&application_name=myapp`;
const subst = `$1 \n$2 \n$3 \n$4 \n$5 \n---\n`;
// The substituted value will be contained in the result variable
const result = str.replace(regex, subst);
console.log('Substitution result: ', result);
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for JavaScript, please visit: https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Regular_Expressions