【问题标题】:Sizzle's Javascript regex for CLASS?Sizzle 用于 CLASS 的 Javascript 正则表达式?
【发布时间】:2013-12-21 05:41:08
【问题描述】:

我查看了 Prototype.js 代码并在那里看到(在 Sizzle 部分):

我的问题是关于那条线的:

CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,

\. 用于 dot , 接下来是(未捕获的组:单词、范围和-)或(\.)。 (实际上是\\.,但第一个只是为了逃避,所以它是\.

嗯?

\. 是什么?

我测试了/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/.test('.aa\.'),它返回true

但是.aa\. 是什么?显然这个类是 .aa 但如果 \ 是一个有效的 char ,为什么它不在 [..] 部分?

我错过了什么?

【问题讨论】:

  • 假设您的 HTML 中有一个类是 foo.bar。这是 HTML 中有效的单个类,但由于.,它弄乱了 CSS 样式选择器。所以要使用选择器来选择它,它需要看起来像".foo\.bar"演示: jsfiddle.net/PGmEr
  • 很难说apparently Sizzle has completely refactored this code看起来他们正在尝试实现某种类导航,例如 .classA\.class1 但如果没有看到其余代码,我真的无法判断。
  • @BlueSkies 为什么不".foo\.bar"
  • @blesh Prototype 最新版本使用它。所以我猜这是有意义的
  • @RoyiNamir:这就是我所拥有的。如果您指的是我最初拥有的".foo\\.bar",我起初有一个错字。我以为反斜杠会被删除,所以我一开始就逃脱了。但在 JS 字符串文字中,您需要 ".foo\\.bar" 才能创建字符 .foo\.bar。请参阅我在上面发布的演示。

标签: javascript regex sizzle


【解决方案1】:

\\. 匹配文字反斜杠,后跟任意字符(点没有转义)。

来自http://Sizzlejs.com/

转义选择器支持#id\:value

它用于匹配a\~b 之类的类,实际上它在屏幕截图上的大多数选择器中重复出现。通常在名称或类中有点或括号时很常见。

至于你的测试:

  • 在 JavaScript 中,“无效”转义序列被忽略"\." === ".",你的测试和.test('.aa.')一样。
  • .test 允许部分匹配 - /\w+/.test("a!") === true - 这并不意味着最后一个点实际匹配。

【讨论】:

  • 在 SO 控制台上运行 $(".subheader") 确实向我展示了与 $("\.subheader") 相同的元素......你是对的
  • @RoyiNamir - 写"\." === "." :-)
  • kobi - 那么为什么他们没有将它添加到 [] 部分?
  • +1 哇。旁边应该有一条注释,例如“永远不要使用此功能”
  • @RoyiNamir - 将其添加到 [](字符集)是错误的 - 它会允许 `abc`,这将是一个错误。更重要的是,您希望在反斜杠之后立即任何字符,字符集无法做到这一点。
猜你喜欢
  • 1970-01-01
  • 2012-11-23
  • 1970-01-01
  • 2010-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-16
  • 1970-01-01
相关资源
最近更新 更多