【问题标题】:There must something before the string字符串之前必须有一些东西
【发布时间】: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 链接或十六进制代码)

--

Here's what I do:

\$\('((?:\.|#)([_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(') ..

标签: php jquery regex


【解决方案1】:

你需要在这里使用\G锚点。锚点\G 匹配上一场比赛结束的位置。在第一次匹配尝试期间,\G\A 的方式匹配字符串的开头。

(?:\$\('|(?<!^)\G)\s?([.#]\w+)[^()\s.#]*(?=[^()]*\))

DEMO

【讨论】:

  • 匹配的不是类(.xxx)或ID(#xxx)
  • 看到这个 regex101.com/r/qE3wW5/7 ,它不会匹配 (.xxx) or ID(#xxx) 。请重新检查。
  • 对不起我的英语,你真的做得很好,问题是$('#aaa .bbb ccc')会给我#aaa .bbb ccc,但我只想要#aaa .bbb
  • 我用$('.aa.bb .cc #dd ee #hh')对其进行了测试,它从ee停止,所以它只给了我.aa .bb .cc #dd,但我希望.aa .bb .cc #dd #hh
  • 我刚花了一个小时研究你的正则表达式,效果很好,非常感谢你的帮助,我发现了最后一个问题,#test-hello 只会捕获#test,所以我改变了([.#]\w+)([.#][-\w]+) 一切正常,非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-09-23
  • 2011-09-07
  • 2017-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-28
相关资源
最近更新 更多