Регулярное выражение, из учебника. Ни как не могу понять
// регэксп для пары атрибут=значение
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 просто вставит запомненное? |
emptinessandform,
не знаю что делает \1 - может кто пояснит, но я бы предложил такой вариант, найдёт больше тегов чем, вариант из учебника.
var reg = new RegExp('<(((["\'])[^"\']*\\3)|[^>])*?>', 'g');//ищет либо не > или что-то в любых кавычках 'test'
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 (нет результатов, быстро)
|
Цитата:
([a-z]+)(\1) -> ([a-z]+)([a-z]+) |
Цитата:
|
theKingOfJava,
ок |
| Часовой пояс GMT +3, время: 05:14. |