Regular expression
以分割URL为例,记录一点正则表达式的用法~
1 | var parse_url = /^(?:([A-Za-z]+):)?(\/{0,3})([0-9.\-A-Za-z]+)(?::(\d+))?(?:\/([^?#]*))?(?:\?([^#]*))?(?:#(.*))?$/; |
^字符表示字符串的开始:
1
(?:([A-Za-z]+):)?
匹配协议名,A-Za-z这个字符类包含26个大小写字母。连字符(-)表示范围A到Z。后缀 + 表示这个字符类会被匹配一次或者多次。
1
(\/{0,3})
匹配//,\/表示应该匹配/(斜杠)。它用\(反斜杠)来进行转义,以免被错误解释为结束符。后缀{0,3}表示/会被匹配0次,或者1~3次。
1
([0-9.\-A-Za-z]+)
匹配主机名,由一个或多个数字,字母以及 . 或 - 字符组成。 - 会被转义为 - 以防与表示范围的连字符混淆。
1
(?::(\d+))?
匹配端口号,它由一个前置 : 加上一个或多个数字而组成的序列。 \d 表示一个数字字符。
1
(?:\/([^?#]*))?
以 / 开始。之后的字符类[^?#]以一个^开始,它表示这个类包含除 ? 和 # 之外的所有字符。 * 表示这个字符类会被匹配0次或多次。
1
(?:\?([^#]*))?
以 ? 开始匹配url带参。包含0个或多个非 # 字符。
1
(?:#(.*))?
以 # 开始匹配除行结束符以外的所有字符。
1
$
$ 表示这个字符串的结束。它保证在这个url的尾部没有其他更多的内容了。