【发布时间】: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