我正试图通过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()中获取类
答案
这将捕获addClass
、removeClass
和toggleClass
内部的全部内容,
据我所知,这是一种愚蠢的方式。
/(?:'.(?: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