【发布时间】:2015-04-09 10:20:49
【问题描述】:
我正在使用 PHP 并试图捕获 jQuery 选择器中的所有 ID 和类,例如:
$('#ddd .aaa #bbb #c').show();
test.$('#eee[type=submit] .fff').addClass('test')
但是my regex 也会捕获 '.jpg'、'.png' .. url,现在我有了另一个想法
"在任何类名或 id 前面必须有一个$(' 符号"
(所以它不会捕获任何 URL 链接或十六进制代码)
--
\$\('((?:\.|#)([_a-zA-Z]+[_a-zA-Z0-9-]*))(?=[^\(]*\))
但它只会捕获第一场比赛
#ddd
#eee
如何获取每个类的名称或 ID,例如:
#ddd
.aaa
#bbb
#c
#eee
.fff
并保持(或重复?)规则:字符串前面必须有一个$(' 符号。
--
答案:
此正则表达式将搜索 $()、.find()、.prependTo()、.closest() 中的类和 ID,
所以你需要手动添加更多选择器:
/(?:(?:\$|\$_|\.(?:find|prependTo|closest))\(\'|(?<!^)\G)\s?([.#][-\w]+)?[^()\s.#]*(?=[^()]*\))/gm
【问题讨论】:
-
你为什么要这样做?使用a PHP DOM parser 而不是正则表达式。
-
我正在做一个随机类名系统,所以我想获取所有类名和ID,然后我可以为它们生成一个随机名称并替换它们。
-
对于“之前必须有某些东西”,您需要使用肯定的后向断言:“(?code.tutsplus.com/tutorials/…
-
我之前尝试过积极的lookbehind,但我不能在其中使用
|符号,它给了我一个Lookbehind assertion is not fixed width错误,因为我有不同的header(例如:$_(',.find(') ..