在jquery选择器中获取id或类名,使用PHP的regex


Get id or class name in jquery selector use regex by PHP

我正试图通过PHP 捕获选择器中的所有id和类名

这是我正在使用的正则表达式:

/(?:'$|'$_|.(?:find|prependTo|closest|addClass|removeClass|toggleClass))+'(''(.*?)''')/

它适用于

$('#test')
$('#test .banana')

它会给我#test#test .banana(我可以使用PHP按空间分割它们)

但它无法在以下选择器上使用

$('.photo-preview[temp-id="' + Index + '"]')
$('.photo-preview[temp-id="' + Index + '"] .hello')

它只会捕获整个内容,而不仅仅是类名

有什么方法可以获取类名吗?

--

编辑:还没有答案,所以我决定使用这两个正则表达式,直到有一个真正的答案

(?:'.|#)-?([_a-zA-Z]+[_a-zA-Z0-9-]*)(?=[^'(]*'))

解释:查找所有id和类

(?:'$|'$_|.(?:addClass|removeClass|toggleClass))'(''([_a-zA-Z]+[_a-zA-Z0-9-].*(?=[^'(]*''')))

解释:在addClass()、removeClass()中查找这些类名。。等等

因为在使用addClass()时它们没有点或#符号

--

现在通过"|"(OR)将它们混合为一个正则表达式

这是临时答案

(?:'.|#)-?([_a-zA-Z]+[_a-zA-Z0-9-]*)(?=[^'(]*'))|(?:'$|'$_|.(?:addClass|removeClass|toggleClass))'(''([_a-zA-Z]+[_a-zA-Z0-9-].*(?=[^'(]*''')))

成功:这会成功的。和#符号,甚至"addClass('"字符串,

因此,您需要选择正确的数组,并通过PHP拆分或不必要的符号。

请稍等:这也会捕获".jpg",仍在编辑中。。

好的,我刚刚在这里发布了另一个问题:字符串之前一定有内容

我想我得到了答案。

小心:请注意,有些regex会捕获.#符号,有些则不会

--

1.在选择器中获取ID和类

答案

您仍然无法在addClass()、removeClass()中获取类名。。

/(?:(?:'$|'$_|'.(?:find|prependTo|closest))'(''|(?<!^)'G)'s?([.#][-'w]+)?[^()'s.#]*(?=[^()]*'))/gm

演示

--

解释

一个小把戏

(?:(?:'$|'$_|'.(?:find|prependTo|closest))'(''|(?<!^)'G)

这是在选择器中确认ID或类的一个小技巧

所以你不会url(http://www.google.com/test.jpg)中得到.jpg

但坏消息是,当有新的选择器时,你需要手动添加它们

不想捕获。和#

您只需要在正则表达式中删除[.#],因此需要更改

/(?:(?:'$|'$_|'.(?:find|prependTo|closest))'(''|(?<!^)'G)'s?([.#][-'w]+)?[^()'s.#]*(?=[^()]*'))/gm
                                                              ^^^
                                                      Remove this bracket

--

2.在addClass()、removeClass()中获取类

答案

这将捕获addClassremoveClasstoggleClass内部的全部内容,

据我所知,这是一种愚蠢的方式。

/(?:'.(?:addClass|removeClass|toggleClass))'('(.*?)'')/g

演示

--

3.在CSS中获取ID和类

答案

/(?![^{]+})(?:'.|#)([_a-zA-Z]+[_a-zA-Z0-9-]*)/g

演示

--

这个问题的答案是什么

让我们收集第一个和第二个正则表达式

/(?:(?:'$|'$_|'.(?:find|prependTo|closest))'(''|(?<!^)'G)'s?([-'w]+)?[^()'s.#]*(?=[^()]*'))|(?:'.(?:addClass|removeClass|toggleClass))'('(.*)'')/g

因此您现在可以在选择器、中获取ID和类

您仍然需要以其他方式在addClass()、removeClass()中拆分类。

DEMO