const regex = new RegExp('<\\s*tag\\b[^>]*?(?<=\\s)attribute1\\s*=\\s*\\"([^\\"]*)\\"[^>]*>', 'gi')
const str = `<tag attribute1="'text123'" />
<TAG attribute2="'true'" attribute1="'text1'"/>
<tag attribute2="'true'"/>
< tag
type="apple" title="Golden apple"
ATTRIBUTE1="value" />
<!-- This one should not match -->
<tagger attribute1="something">
<!-- But this one yes -->
<tag data-id="6735"
attribute1="'some more text'"
required >
Whatever in here
</tag>
</tagger>
<!--
Should not match if "attribute1" is part of an other attribute name.
As attributes can contain a hyphen, we can't use \\battribute1 because \\b
will not consider the hyphen as part of a word. This is why we have to
use the positive lookbehind (?<=\\s)
-->
<tag matching="false" data-attribute1="" />`;
// Reset `lastIndex` if this regex is defined globally
// regex.lastIndex = 0;
let m;
while ((m = regex.exec(str)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
// The result can be accessed through the `m`-variable.
m.forEach((match, groupIndex) => {
console.log(`Found match, group ${groupIndex}: ${match}`);
});
}
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