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

なぜドットです。この部分で [0-9.-A-Za-z]+ バックスラッシュでエスケープされていませんか?

4

2 に答える 2

2

大括弧 ( []) は、文字クラスを指定します: の間の文字列内の単一の文字に一致します[]

文字クラス内では、\とだけ-が特別な意味を持ちます (メタ文字です):

  • バックスラッシュ\: 一般的なエスケープ文字。
  • ハイフン-: 文字範囲。
    • ただし、特別な意味を持つには、文字の間にある必要があることに注意してください。
      • [0-9]0はとの間の任意の数を意味9し、では範囲ではなく、通常の の品質を想定して[09-]います。--

そのため、 の内部[]では、 a.は単なる (一致のみ) ドットです。

注:] charなどの文字クラス内で使用するには、 char をエスケープする必要があることにも注意してください。[a-z\]]そうしないと、通常どおり閉じてしまいます。最後に、^のように を使用すると、否定され[^a-z]た文字クラス が指定されます。これは、それらのいずれでもない任意の char (例では、 ではない任意の char ) を意味します。a...z

于 2013-10-08T20:42:03.110 に答える
1

したがって、ドットに一致します。

一部の状況 (たとえば、文字クラス ブラケットの最初の文字ではない範囲ハイフンをエスケープする場合) を除いて、クラス内の特殊文字をエスケープする必要はありません。

文字クラス内の通常のメタ文字をエスケープすることはできますが、ノイズが多く冗長です

于 2013-10-08T20:41:02.017 に答える