Crockford - 第7章 - parse_url

时间:2013-10-08 20:37:51

标签: javascript regex

var parse_url = /^(?:([A-Za-z]+):)?(\/{0,3})([0-9.\-A-Za-z]+)(?::(\d+))?(?:\/([^?#]*))?(?:\?([^#]*))?(?:#(.*))?$/;

为什么是圆点。在这一部分     [0-9.-A-ZA-Z] + 是不是被反斜杠逃脱了?

2 个答案:

答案 0 :(得分:2)

括号([])指定一个字符类:匹配[]之间字符串中的单个字符。

在字符类中,只有\-具有特殊含义(元字符):

  • 反斜杠\:一般转义字符。
  • 连字符-:字符范围。
    • 请注意,它必须在字符之间具有特殊含义:
      • [0-9]表示09之间的任意数字,而在[09-]中,-表示普通-的质量,而不是范围。

这就是为什么,在[]内,.只是(只会匹配)一个点。

注意:还值得注意的是,必须转义字符]才能在字符类中使用,例如[a-z\]],否则会将其关闭为通常。最后,使用^,如在[^a-z]中,指定否定字符类,这意味着任何不是其中一个的char(在示例中,任何不是a...z)。

答案 1 :(得分:1)

所以它匹配一个点。

除非在某些情况下(例如,当它不是字符类括号中的第一个字符时转义范围连字符),您不需要转义类中的特殊字符。

可能转义字符类中的正常元字符,但它很嘈杂且冗余。