在JScript正则表达式字符类中如何转义斜杠?

8

我有一个正则表达式用于测试数字(0-9)和/或斜杠(/)。它看起来像这样:

/^[0-9/]+$/i.test(value)

我认为这是正确的,但Eclipse JavaScript验证器不同意:

标记“]”上的语法错误,请删除此标记

我猜这是因为分隔符/分界符是/ ,因此Eclipse“认为”正则表达式已经结束(因此]是意外的)。

我们可以通过对/ 进行转义来满足Eclipse:

/^[0-9\/]+$/i.test(value)

请注意,这两个版本都对我有效。
我的疑问是:
- 据我所知,在该范围内我不需要特别转义正斜杠。它可能是情况特定的(例如,在javascript中,它是使用的分隔符)。 - 尽管它们似乎都有效,但我更愿意使用“正确”的版本,因为在不同环境下具有不同行为,而且,嗯...因为是正确的 :) - 有人知道我应该做什么吗?转义还是不转义?我没有找到任何可靠的网站告诉我在范围内转义“/”,但Eclipse验证器可能并非完全愚蠢...

是的,令人烦恼的是,Notepad++ 的语法高亮也会出错。 - MikeM
1个回答

10

标准清楚地说明您可以将除\]和换行符之外的任何未转义的内容放入字符类中:

RegularExpressionClassChar ::
   RegularExpressionNonTerminator but not ] or \
   RegularExpressionBackslashSequence

RegularExpressionNonTerminator ::
    SourceCharacter but not LineTerminator

(http://es5.github.com/#x7.8.5)。在不确定的情况下,我个人会转义所有内容,以使不太聪明的解析器也能正常运行。


不错:)。我对“Ecma标准”并不是很了解,这是大多数.js解析器使用的标准吗?如果某些内容不需要转义,你能够在不破坏其他内容的情况下进行转义吗? - Nanne
@Nanne:是的,大多数JavaScript供应商都试图跟上ECMA标准。并不是每个人都完全做到了,但基本的东西应该在任何地方都能正常工作。而且,即使可以省略它,额外的反斜杠也不会有什么影响。 - georg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接