我试图通过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-]*)(?=[^\(]*\))解释:找到所有的ids和类
(?:\$|\$_|.(?:addClass|removeClass|toggleClass))\(\'([_a-zA-Z]+[_a-zA-Z0-9-].*(?=[^\(]*\'\)))解释:在addClass()、removeClass()中找到这些类名。诸如此类
因为在使用addClass()时,它们没有点号或符号
--
现在将它们混合为一个正则表达式,由“AC.26”(OR)来表示。
,这是临时答案,
(?:\.|#)-?([_a-zA-Z]+[_a-zA-Z0-9-]*)(?=[^\(]*\))|(?:\$|\$_|.(?:addClass|removeClass|toggleClass))\(\'([_a-zA-Z]+[_a-zA-Z0-9-].*(?=[^\(]*\'\)))BECAREFUL:将被捕获。和#符号,甚至“addClass(‘’)字符串,
因此,您需要选择正确的数组,并通过PHP拆分或不必要的符号。
等一下:这也会抓到".jpg“,还在编辑..。
发布于 2015-02-09 18:29:53
好吧,我在这里发布了另一个问题:https://stackoverflow.com/questions/28413812/there-must-something-before-the-string/28414000?noredirect=1#comment45163575_28414000
我想我知道答案了。
. BE WARE:请注意一些regex会捕获 # 和#符号,还有一些不会
--
1.在选择器中获取in和类
答案
但是仍然无法在addClass()、removeClass()中获得类名。
/(?:(?:\$|\$_|\.(?:find|prependTo|closest))\(\'|(?<!^)\G)\s?([.#][-\w]+)?[^()\s.#]*(?=[^()]*\))/gmhttps://regex101.com/r/oV7dF3/1
--
解释
一个小把戏
(?:(?:\$|\$_|\.(?:find|prependTo|closest))\(\'|(?<!^)\G)这是在选择器中确认ID或类的一个小技巧,
所以你不会把.jpg带到url(http://www.google.com/test.jpg),
但坏消息是,当有新的选择器时,您需要手动添加它们
不想被抓。那么#?
您只需要在regex中删除[.#],所以您需要更改
/(?:(?:\$|\$_|\.(?:find|prependTo|closest))\(\'|(?<!^)\G)\s?([.#][-\w]+)?[^()\s.#]*(?=[^()]*\))/gm
^^^
Remove this bracket--
2.在addClass()、removeClass()中获取类。
答案
这将捕获addClass、removeClass和toggleClass中的全部内容,
据我所知,这是一种沉默的方式。
/(?:\.(?:addClass|removeClass|toggleClass))\('(.*?)'\)/ghttps://regex101.com/r/oV7dF3/1
--
3.在CSS中获取in和类
答案
/(?![^{]+})(?:\.|#)([_a-zA-Z]+[_a-zA-Z0-9-]*)/ghttps://regex101.com/r/oK9fM0/2
--
这个问题的答案是什么?
让我们收集第一和第二正则表达式
/(?:(?:\$|\$_|\.(?:find|prependTo|closest))\(\'|(?<!^)\G)\s?([-\w]+)?[^()\s.#]*(?=[^()]*\))|(?:\.(?:addClass|removeClass|toggleClass))\('(.*)'\)/g所以您现在可以在选择器中获得in和类,
您仍然需要以其他方式拆分addClass()、removeClass()中的类。
https://stackoverflow.com/questions/28408551
复制相似问题