Javascript-форум (https://javascript.ru/forum/)
-   Ваши сайты и скрипты (https://javascript.ru/forum/project/)
-   -   Парсинг селекторов (https://javascript.ru/forum/project/23924-parsing-selektorov.html)

devote 12.12.2011 09:53

Парсинг селекторов
 
Привет всем. Написал регу для раскладки селектора по частям

var scanSelector = prompt("Enter selector: ", '#cssplay > ns|a.p1:active .p4 img[src=".png\\\\"], a|ns[rel="te\\"]st\\\\"]:not(div[test="name"])'),

	rega = /\s*(?:(\*|(?:(?:\*|[\w\-]+)\|)?[\w\-]+))?(?:\[\s*(?:((?:[\w\-]+\|)?[\w\-]+)\s*((?:~|\^|\$|\*|\|)?=)\s*)?((?:".*?(?:(?:[\\]{2}(?="))|[^\\])"|'.*?(?:(?:[\\]{2}(?='))|[^\\])'|[^"'].*?)?)\s*\])?(?:(\.|#)([\w\-]+))?(?:(:(?::)?)([\w\-]+)(?:\(\s*([^\s,]+)\s*\))?)?(?:(?:\s*(?=\s))?(?:(?:\s(?=,|>|\+|~))?([\s,>+~](?!$)))?)?/g,

	nm = [
		"Fragment: ",
		"Tag name: ",
		"Attribute name: ",
		"Condition type: ",
		"Attribute name/value: ",
		"Id or Class prefix: ",
		"Id or Class name: ",
		"Pseudo type: ",
		"Pseudo name: ",
		"Pseudo content: ",
		"Next search type: "
	],
	m = null, s = "CSS Selector: " + scanSelector + "\n\n",
	lastIndex = 0;

rega.lastIndex = 0;

do {
	lastIndex = rega.lastIndex;

	m = rega.exec( scanSelector );

	for(var i = 0; i < m.length; i++ ) {
		s += nm[ i ] + "'" + m[ i ] + "'\n";
	}
	s += "\n";

} while( ( lastIndex < rega.lastIndex ) && ( rega.lastIndex < scanSelector.length ) );

alert( s );


Помогите найти какой нить необычный селектор, который эта рега просто не захочет скушать.

СПС

Pavel M. 12.12.2011 10:51

#cssplay > a.p1:active .p4 img[src=.png][name=xxx]

devote 12.12.2011 11:03

Pavel M.,
Спасибо, данный селектор принимается нормуль.

P.S. Признаюсь честно даже не пробовал подобный вбивать, но как не удивительно, норм его принимает.

B~Vladi 12.12.2011 12:37

Не понимает пространства имен:
ns:tag[attr:name=123]

devote 12.12.2011 13:00

B~Vladi,
хм... в спецификации о них я что-то не видел текста... Если не затруднит, ткните меня в данный раздел плиз... Но подумаю над этим.

Спасибо большое!

devote 12.12.2011 13:12

А нашел в спецификации, да вы правы есть такое, что-то упустил я их

B~Vladi 12.12.2011 13:17

devote, регу по именам тегов и имен/значений атрибутов можешь взять тут.

PeaceCoder 12.12.2011 15:56

#cssplay > a.p1:active .p4 img[src=".png\\"]

Attribute name/value: 'src=".png\\"'

C этой проблемой я столкнулся когда делал свои селекторы.

devote 12.12.2011 22:17

Цитата:

Сообщение от PeaceCoder
#cssplay > a.p1:active .p4 img[src=".png\\"]

Attribute name/value: 'src=".png\\"'

C этой проблемой я столкнулся когда делал свои селекторы.

А вы пробовали вбить подобный селектор в querySelectorAll он ее тоже не принимает

devote 12.12.2011 22:23

Цитата:

Сообщение от B~Vladi
devote, регу по именам тегов и имен/значений атрибутов можешь взять тут.

Это не то! Пространства имен по спецификации в селекторах пишется похоже через знак '|' вот можете посмотреть http://www.w3.org/TR/css3-selectors/#w3cselgrammar


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