Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.03.2012, 11:33
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

Одноразовый парсер. нужен многоразовый ))
Парсим строку, получим её из css стиля.
cssCode=document.styleSheets[0].ownerNode.innerHTML;
 // получим h2{ font-color:#900; font-color:#555; font-size:15px; }"


парсит следующая конструкция.

var css='font-color',
     test=new RegExp(css+'.*:(.*);', 'im');
//здесь выведем результат, на всякий случай двумя функциями
console.log(cssCode.match(test));
console.log(test.exec(cssCode));


В консоле появится вот это.
["font-color:#900;", "#900"]
["font-color:#900;", "#900"]

данные я получил именно те что хотел.
но вот неувязка.
Почему распарсилась только строка font-color:#900;
а вторая строка font-color:#555; нет ???

То есть возвращается только первый найденный элемент.
================================================== =======
upd: такс проблема несколько прикольнее.
первая строка возвращается только в том случае если
cssCode=document.styleSheets[0].ownerNode.innerHTML;


а если указать строку непосредственно, и без перевода каретки
cssCode=	"h2{ font-color:#900; font-color:#555; font-size:15px; }";

тогда возвращается строка от первого font-color до конца строки.

хм получается что парсер парсит от font-color до перевода каретки, типо того.

Последний раз редактировалось DjDiablo, 23.03.2012 в 12:00.
Ответить с цитированием
  #2 (permalink)  
Старый 23.03.2012, 12:14
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

'img'
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #3 (permalink)  
Старый 23.03.2012, 12:30
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

если бы.
уже пробывал

cssCode=""+CSSStyleSheet.ownerNode.innerHTML;
test=new RegExp('font-color:(.*);', 'img');	

cmd=test.exec(cssCode);
console.log(cssCode);


попрежнему только первая строка.
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 23.03.2012 в 12:40.
Ответить с цитированием
  #4 (permalink)  
Старый 23.03.2012, 12:36
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Точка не работает с multiline. Используйте [\s\S] вместо неё.
__________________
kobezzza
code monkey
Ответить с цитированием
  #5 (permalink)  
Старый 23.03.2012, 12:44
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

Сообщение от kobezzza Посмотреть сообщение
Точка не работает с multiline. Используйте [\s\S] вместо неё.
http://www.pcre.ru/eval/font-color%3...262a%3B%09%7D/

В моём случае и вовсе нечего ненаходит.
cssCode=""+CSSStyleSheet.ownerNode.innerHTML;
	test=new RegExp('font-color:([\s\S]*);', 'img');	

	cmd=test.exec(cssCode);
	console.log(cssCode);
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 23.03.2012 в 12:48.
Ответить с цитированием
  #6 (permalink)  
Старый 23.03.2012, 12:52
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

попробывал обойтись без точки.
font-color:black;
font-color:white;

cssCode=""+CSSStyleSheet.ownerNode.innerHTML;
test=new RegExp('font-color:([a-z]*);', 'img');	

cmd=test.exec(cssCode);
console.log(cssCode);

результат в консоли: ["font-color:black;", "black"]
тобиш опять получил только первую строку

Мне почему то кажется что дело в каких то волшебных символах в cssCode
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 23.03.2012 в 12:56.
Ответить с цитированием
  #7 (permalink)  
Старый 23.03.2012, 13:00
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

1. Не понятно зачем Вам многострочный поиск, если ищите в одной строке
2.
Сообщение от kobezzza
Точка не работает с multiline. Используйте [\s\S] вместо неё.
alert( 'получим h2{ font-color:#900; font-color:#555; font-size:15px; }'.match( /font-color:[^;]+/gi ).join( '\n' ) );
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #8 (permalink)  
Старый 23.03.2012, 13:12
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

http://javascript.ru/tutorial/regexp...perenos-stroki
__________________
kobezzza
code monkey
Ответить с цитированием
  #9 (permalink)  
Старый 23.03.2012, 13:20
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

к слову font-color:[^;]+/gi
прекрасно справился с одной строкой
но в строке которую возвращает ownerNode.innerHTML
он как и все предыдущие примеры нашёл только первую строку.
__________________
Лучше калымить в гандурасе чем гандурасить на колыме
Ответить с цитированием
  #10 (permalink)  
Старый 23.03.2012, 13:21
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

отбой
match сработал корректно
а вот exec нет.

но match мне более чем достаточно.
Спасибо
__________________
Лучше калымить в гандурасе чем гандурасить на колыме
Ответить с цитированием
Ответ



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

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