Регулярное выражение, из учебника. Ни как не могу понять
// регэксп для пары атрибут=значение 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, время: 15:49. |