Pattern

モジュールパス: /alier_sys/Pattern.js

概要


斜線 ("/") で区切られた単語列を表すパターンを表すオブジェクトのクラスです。

クライアント側では、主に WebApi を対象とするメソッドの引数を、その WebApi のメソッドに対応する Web API のエンドポイント URL のパスに展開するために利用されます。

サーバ側では、リクエストされたパスから WebApi のメソッドへ渡す引数を抽出するために利用されます。

ワイルドカード

特定の文字列が自身の表すパターンに一致するか判定したり、パターン中のワイルドカードに該当する部分を抽出したりすることができます。

ワイルドカードには2種類の記法を用いることができます。

単語単位のワイルドカード

パターン中のコロン (":") で始まる単語は ラベルつきのワイルドカード として扱われます。

例: パターン "/foo/:bar" 中の単語 ":bar""bar" とラベルされたワイルドカードです。このパターンに対して例えば "/foo/ABC""/foo/123" などが一致します。

ただし、"/foo/123/ABC" などは "foo" に続いて複数の単語が続くため、"/foo/:bar" には一致しません。

前方/後方の単語列のワイルドカード

パターンの先頭または末尾に置かれた単語がアスタリスク ("*") である場合、これは複数の連続する単語列を表すワイルドカードとして扱われます。

先頭に "*" を持つパターンは 後方一致 (backward match) を表し、末尾に "*" を持つパターンは 前方一致 (forward match) を表します。

特に、先頭および末尾の両方に "*" を持つパターンは 部分一致 (partial match) を表し、先頭および末尾のいずれも "*" でないパターンは 完全一致 (exact match) を表します。

例: パターン "*/foo/*" 中の単語 "*" は複数の連続する単語列に一致するワイルドカードです。文字列 "abc/def/foo/123/456""/foo/123/456" などに一致します。ただし、単語 "foo" を含まない文字列は "*/foo/*" には一致しません。

また、パターンの中間に現れるアスタリスクはワイルドカードではなく通常の単語として扱われます。

コンストラクタ


構文

new Pattern({ pattern }) => Pattern
new Pattern({ pattern, isCaseSensitive }) => Pattern

引数

以下のプロパティを持つオブジェクトです。

  • pattern: string

    パターンを表す文字列です。

    この文字列は斜線 ("/") で区切られた単語またはワイルドカードの列です。

  • isCaseSensitive: boolean

    パターンの単語の一致比較を大文字小文字を区別して(case-sensitive に)行うかどうかを表すフラグです。true なら大文字小文字の区別をし、false なら区別をしません。

    既定値はfalseです。

例外

  • TypeError
    • 引数が非 null のオブジェクトでなかった場合。
    • 引数プロパティに与えられたパターン pattern が文字列でなかった場合。
    • 引数プロパティに与えられたフラグ isCaseSensitive が論理値でなかった場合。

解説

このオブジェクトは WebApiアプリ版NodeJS 版)や WebResource のインスタンスを一意に示す識別子として利用されます。

パターンのラベルは、クライアントからリクエストを送信する際に、リクエストのパラメタに応じて置換され、実際のリクエスト先のパスを決定するために使用されます。

またサーバがリクエストを受信する際に、リクエスト先のパスからラベルに対応する単語をパラメタとして抽出するためにも使用されます。

メソッド


match()

与えられた文字列または Pattern が対象の Pattern に一致するかどうか検査します。

matchAt()

与えられた文字列中の対象の Pattern に一致する部分単語列の出現する先頭の位置を探します。

extract()

与えられた文字列から対象のパターン中のラベルに一致する単語を抽出します。

map()

パターン中のラベルを与えられた配列の成分またはオブジェクトのプロパティで置き換えます。

has()

指定した名前のラベルが存在するかを検査します。

compare()

与えられた2つのパターンの順序を比較します。順序比較は辞書式順序にしたがって行われます。

escape()

与えられた文字列の中の、ラベルおよびワイルドカードを表す文字をエスケープします。

unescape()

与えられた文字列の中の、エスケープされたラベルおよびワイルドカードのエスケープシーケンスを元に戻します。

プロパティ


isCaseSensitive

パターンが case-sensitive かどうかです。

boolean

詳細

true なら case-sensitive であることを、false なら case-insensitive であることを示しています。

case-sensitive の場合は大文字小文字の違いを無視せず単語の一致を検査し、case-insensitive の場合は大文字小文字の違いは無視して単語の一致を検査します。

この値はコンストラクタ constructor() の引数プロパティ isCaseSensitive として与えられます。


pattern

パターンを表す文字列です。

string

詳細

この値はコンストラクタ constructor() の引数プロパティ pattern として与えられます。


tokens

このプロパティは読み取り専用です。

パターンに含まれる単語列を返すイテレータです。

Iterator<string>

詳細

このプロパティは pattern の斜線 ("/") で区切られた単語列を返すイテレータです。


labels

パターンに含まれる単語単位のワイルドカードのラベル名を出現順に返すイテレータです。

Iterator<string>


kind

一致の種別を表す文字列です。

"exact" | "forward" | "backward" | "partial"

詳細

以下のいずれかの値を持ちます:

  • "exact" --- 完全一致のパターンの場合に設定されます。
  • "forward" --- 前方一致のパターンの場合に設定されます。
  • "backward" --- 後方一致のパターンの場合に設定されます。
  • "partial" --- 部分一致のパターンの場合に設定されます。

いずれの種別になるかは pattern の値によります。各種別については前方/後方の単語列のワイルドカードを参照してください。