// регэксп для пары атрибут=значение
var attr = /(\s*\w+=(\w+|"[^"]*")\s*)/
// используем его внутри регэкспа для тега
var reg = new RegExp('<\\w+(?=(' + attr.source + '*))\\1>', 'g');
var good = '...<a test="<>" href="#">... <b>...';
var bad = "<tag a=b a=b a=b a=b a=b a=b a=b a=b\
a=b a=b a=b a=b a=b a=b a=b a=b a=b a=b a=b a=b a=b";
alert( good.match(reg) ); // <a test="<>" href="#">, <b>
alert( bad.match(reg) ); // null (нет результатов, быстро)
в этом выражении мне вроде бы все понятно, но я не уверен.
<\\w+(?=(' + attr.source + '*))\\1>
первая часть выражения
<\\w+(?=(' + attr.source + '*))\\1>
сработает только если внутренняя скобка найдет любое выражение подходящее под attr.source?
ну вот сработало, а потом, что произойдет?
<\\w+(?=(' + attr.source + '*))
\\1> //1 просто вставит запомненное?