Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Я не разбираюсь в RegExp (https://javascript.ru/forum/misc/22489-ya-ne-razbirayus-v-regexp.html)

Aetae 22.10.2011 13:28

Что вы таки под этим опять подразумеваете?

Solovei95 22.10.2011 13:35

Ну проблема о5 - он на массив не разбирает! Мне просто нужен особый RegExp для split и все!
Почему помочm не можете?
Мне дано у элемента:
#box {
  background-image:url(image.png), linear-gradient(bottom, rgb(76,47,92) 41%, rgb(107,76,120) 71%, rgb(140,107,156) 86%);
}

Нужно чтобы получилось:
array[0] = "url(image.png)";
array[1] = "linear-gradient(bottom, rgb(76,47,92) 41%, rgb(107,76,120) 71%, rgb(140,107,156) 86%)";


Я только знаю, что при помощи join можно начать обратный процесс:
background = array.join(",");

Aetae 22.10.2011 13:45

Разбирает:
<div id="block" style="background:url(clock.png),-moz-linear-gradient(bottom, #F7E82C 49%, #FFFF47 75%, #FFFF64 88%)"></div>
<script>
function st(prop){
return typeof prop == 'string' ? prop.match(/[^, ].+?(?=, url|, -moz-linear-gradient|$)/g) : prop.join(', ')
}
a=document.getElementById("block").style;



alert(st(a.background).join('\n\n'))

b=['url(no.png)'];
a.background=st(b);
alert(st(a.background).join('\n\n'))
</script>

Solovei95 22.10.2011 13:53

Aetae,
Я все равно не понимаю - у тебя вообще не массив (точнее не объект)...
Кароче - есть что-нибудь более понятное?

dmitriymar 22.10.2011 13:58

Цитата:

Сообщение от Solovei95
Я все равно не понимаю - у тебя вообще не массив (точнее не объект)...
Кароче - есть что-нибудь более понятное?

ну как это не объект? объект и пройтись по всем его свойствам не составляет труда,так же как узнать их имена и значения

Aetae 22.10.2011 13:59

Блджад. *facepalm*
<div id="block" style="background:url(clock.png),-moz-linear-gradient(bottom, #F7E82C 49%, #FFFF47 75%, #FFFF64 88%)"></div>
<script>

function st(prop){
return typeof prop == 'string' ? prop.match(/[^, ].+?(?=, url|, -moz-linear-gradient|$)/g) : prop.join(', ')
}

backgroundImage = document.getElementById("block").style.backgroundImage;

array=st(backgroundImage);

alert(array[0])
alert(array[1])

</script>

Так понятее?
Цитата:

Сообщение от Solovei95 (Сообщение 132257)
Нужно чтобы получилось:
array[0] = "url(image.png)";
array[1] = "linear-gradient(bottom, rgb(76,47,92) 41%, rgb(107,76,120) 71%, rgb(140,107,156) 86%)";


Solovei95 22.10.2011 14:18

Все - понятно! Но можно ли найти что-то общее:
url -moz-linear-gradient
В RegExp.

Aetae 22.10.2011 14:29

Можно, но включить все варианты вручную - надежнее.
Как-то так:
/[^, ].+?(?=, [a-z\-]{4,}|$)/g

Solovei95 22.10.2011 14:46

удалил коммент

Aetae 22.10.2011 14:50

Хех, я какбэ и так универсальную функцию сделал:
global.splitCssProp(prop){
  return typeof prop == 'string' ? prop.match(/[^, ].+?(?=, [a-z\-]{4,}|$)/g) : *!*prop.join(', ')*/!*;
}

Те, если аргументом идёт массив, то она возвращает строку.)
Совсем вы, твоварисчъ, бездумно копируете.


Часовой пояс GMT +3, время: 23:59.