Одноразовый парсер. нужен многоразовый ))
Парсим строку, получим её из 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 до перевода каретки, типо того. |
'img' |
если бы.
уже пробывал cssCode=""+CSSStyleSheet.ownerNode.innerHTML; test=new RegExp('font-color:(.*);', 'img'); cmd=test.exec(cssCode); console.log(cssCode); попрежнему только первая строка. |
Точка не работает с multiline. Используйте [\s\S] вместо неё.
|
Цитата:
В моём случае и вовсе нечего ненаходит. cssCode=""+CSSStyleSheet.ownerNode.innerHTML; test=new RegExp('font-color:([\s\S]*);', 'img'); cmd=test.exec(cssCode); console.log(cssCode); |
попробывал обойтись без точки.
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 |
1. Не понятно зачем Вам многострочный поиск, если ищите в одной строке
2. Цитата:
alert( 'получим h2{ font-color:#900; font-color:#555; font-size:15px; }'.match( /font-color:[^;]+/gi ).join( '\n' ) ); |
|
к слову font-color:[^;]+/gi
прекрасно справился с одной строкой но в строке которую возвращает ownerNode.innerHTML он как и все предыдущие примеры нашёл только первую строку. |
отбой
match сработал корректно а вот exec нет. но match мне более чем достаточно. Спасибо |
Часовой пояс GMT +3, время: 14:08. |