首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在jquery选择器中获取id或类名通过PHP使用regex

在jquery选择器中获取id或类名通过PHP使用regex
EN

Stack Overflow用户
提问于 2015-02-09 11:21:42
回答 1查看 329关注 0票数 2

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

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

代码语言:javascript
运行
复制
/(?:\$|\$_|.(?:find|prependTo|closest|addClass|removeClass|toggleClass))+\(\'(.*?)\'\)/

它适用于

代码语言:javascript
运行
复制
$('#test')
$('#test .banana')

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

但是它不能用于下面的选择器

代码语言:javascript
运行
复制
$('.photo-preview[temp-id="' + Index + '"]')
$('.photo-preview[temp-id="' + Index + '"] .hello')

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

有什么办法能抓到类名吗?

--

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

代码语言:javascript
运行
复制
(?:\.|#)-?([_a-zA-Z]+[_a-zA-Z0-9-]*)(?=[^\(]*\))

解释:找到所有的ids和类

代码语言:javascript
运行
复制
(?:\$|\$_|.(?:addClass|removeClass|toggleClass))\(\'([_a-zA-Z]+[_a-zA-Z0-9-].*(?=[^\(]*\'\)))

解释:在addClass()、removeClass()中找到这些类名。诸如此类

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

--

现在将它们混合为一个正则表达式,由“AC.26”(OR)来表示。

,这是临时答案,

代码语言:javascript
运行
复制
(?:\.|#)-?([_a-zA-Z]+[_a-zA-Z0-9-]*)(?=[^\(]*\))|(?:\$|\$_|.(?:addClass|removeClass|toggleClass))\(\'([_a-zA-Z]+[_a-zA-Z0-9-].*(?=[^\(]*\'\)))

BECAREFUL:将被捕获。和#符号,甚至“addClass(‘’)字符串,

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

等一下:这也会抓到".jpg“,还在编辑..。

EN

回答 1

Stack Overflow用户

发布于 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()中获得类名。

代码语言:javascript
运行
复制
/(?:(?:\$|\$_|\.(?:find|prependTo|closest))\(\'|(?<!^)\G)\s?([.#][-\w]+)?[^()\s.#]*(?=[^()]*\))/gm

https://regex101.com/r/oV7dF3/1

--

解释

一个小把戏

代码语言:javascript
运行
复制
(?:(?:\$|\$_|\.(?:find|prependTo|closest))\(\'|(?<!^)\G)

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

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

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

不想被抓。那么#?

您只需要在regex中删除[.#],所以您需要更改

代码语言:javascript
运行
复制
/(?:(?:\$|\$_|\.(?:find|prependTo|closest))\(\'|(?<!^)\G)\s?([.#][-\w]+)?[^()\s.#]*(?=[^()]*\))/gm
                                                              ^^^
                                                      Remove this bracket

--

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

答案

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

据我所知,这是一种沉默的方式。

代码语言:javascript
运行
复制
/(?:\.(?:addClass|removeClass|toggleClass))\('(.*?)'\)/g

https://regex101.com/r/oV7dF3/1

--

3.在CSS中获取in和类

答案

代码语言:javascript
运行
复制
/(?![^{]+})(?:\.|#)([_a-zA-Z]+[_a-zA-Z0-9-]*)/g

https://regex101.com/r/oK9fM0/2

--

这个问题的答案是什么?

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

代码语言:javascript
运行
复制
/(?:(?:\$|\$_|\.(?:find|prependTo|closest))\(\'|(?<!^)\G)\s?([-\w]+)?[^()\s.#]*(?=[^()]*\))|(?:\.(?:addClass|removeClass|toggleClass))\('(.*)'\)/g

所以您现在可以在选择器中获得in和类,

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

https://regex101.com/r/sR1sU3/1

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28408551

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档