Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 10.04.2015, 10:22
Новичок на форуме
Отправить личное сообщение для emptinessandform Посмотреть профиль Найти все сообщения от emptinessandform
 
Регистрация: 24.02.2015
Сообщений: 4

Регулярное выражение, из учебника. Ни как не могу понять
// регэксп для пары атрибут=значение
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 просто вставит запомненное?
Ответить с цитированием
  #2 (permalink)  
Старый 10.04.2015, 12:23
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,103

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 (нет результатов, быстро)

Последний раз редактировалось рони, 10.04.2015 в 18:49.
Ответить с цитированием
  #3 (permalink)  
Старый 10.04.2015, 12:50
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

Сообщение от рони
\1
\n - Регулярка из скобок, где n - номер скобок.

([a-z]+)(\1) -> ([a-z]+)([a-z]+)
Ответить с цитированием
  #4 (permalink)  
Старый 10.04.2015, 13:21
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,103

Сообщение от Ruslan_xDD
n - номер скобок.
ты можешь обьснить что делает \1 в примере из учебника -- в моём примере \3 ищет вторую кавычку -- зачем нужно \1 я не знаю, но без этого конечно не работает.
Ответить с цитированием
  #5 (permalink)  
Старый 10.04.2015, 18:48
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,103

theKingOfJava,
ок
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как написать регулярное выражение, которое будет возвращать строку? Armen Общие вопросы Javascript 2 09.10.2014 22:29
Как вы относитесь к наркоманам? Maxmaxmaximus7 Оффтопик 7 05.02.2014 13:29
регулярное выражение martinss jQuery 5 29.07.2011 12:46
Не могу понять какая кодировка Andrey Sipin Events/DOM/Window 1 05.10.2009 18:25
Не могу понять как работает jQuery kostiaGt jQuery 2 20.07.2008 08:42