const regex = /<img\s+
(?=[^>]*\balt="(?<alt>[^>]*?)")? # optional alt attribute
(?=[^>]*\bclass="(?<class>[^>]*?)")? # optional class attribute
(?=[^>]*\bsrc="(?<src>[^>]*?)") # src attribute
[^>]*\/>/g;
// Alternative syntax using RegExp constructor
// const regex = new RegExp('<img\\s+
(?=[^>]*\\balt="(?<alt>[^>]*?)")? # optional alt attribute
(?=[^>]*\\bclass="(?<class>[^>]*?)")? # optional class attribute
(?=[^>]*\\bsrc="(?<src>[^>]*?)") # src attribute
[^>]*\\\/>', 'g')
const str = `<img src="image.png" alt="test" style="zoom:55%;" />
<img class="big" src="image2.png" />
<img alt="test" src="image.png" style="zoom:55%;" />
<img src="image.png" class="small" style="zoom:55%;" alt="test" />
<img src="image.png" alt="test" style="zoom:55%;" />
<img src="image.png"
alt="test"
style="zoom:55%;" />`;
const subst = `![${alt}](${src}){.${class}}`;
// 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