私は正規表現の構文に慣れていません。URL が私の例の特定の構造と一致するかどうかを確認するのを手伝ってくれませんか?
.* は /-_# などを含む任意のもので、0 ~ 9 は任意の長さです (例: 1993334)。
var pattern = new RegExp('/articles/[0-9]/[.*]');
if (pattern.test(document.location.href)) {
// match found
}
私は正規表現の構文に慣れていません。URL が私の例の特定の構造と一致するかどうかを確認するのを手伝ってくれませんか?
.* は /-_# などを含む任意のもので、0 ~ 9 は任意の長さです (例: 1993334)。
var pattern = new RegExp('/articles/[0-9]/[.*]');
if (pattern.test(document.location.href)) {
// match found
}
これを試して:
\/articles\/[0-9]+\/.*
したがって、スラッシュをエスケープし、を使用+
して、前の要素が「1つ以上」存在する必要があることを指定します。
[0-9]の代わりに[0-9]+を使用し、スラッシュを正しく使用してください。
var pattern = new RegExp(\/articles\/[0-9]+\/(.*));
if (pattern.test(document.location.href)) {
// match found
}
あなたはすでに答えを得ているので問題ありませんが、Cerbrus があなたに言ったように、正規表現が機能しなかった理由を説明します。
new RegExp('/articles/[0-9]/[.*]');
その/articles/
部分は完全に正しいです。
(任意の数字)についてのアイデアはありましたが[0-9]
、「これは 1 回だけ表示される」と指定しました。a を追加する+
と、「1 つ以上」を指定できます。a を追加した場合と同様に、*
「0 個以上」を意味します。
最後の match[.*]
では、「任意の文字」 ( .
) が「0 回以上」 ( *
) 回繰り返されているため、(この後に何もない) の URL/articles/2/
が一致する可能性があり、これは望ましくない動作であると思います。
完全に正確に言うと、次の正規表現を使用することもできます
^/articles/[0-9]+/.+$
一方、^
これは「これが始まりでなければならない」$
という意味と「これが終わりでなければならない」という意味です。
これらを含めない場合、次のような URL/non-relevant-url/articles/123/my-article/whatever/foo/bar
が一致する可能性があります (また、で始まる場合は一致したくない場合があります/non-relevant-url
-^
これは修正されています)。
注:この$
例では、「この時点以降のすべてに一致する」で終了しているため、実際には必要ありませんが、それが何を意味するかを理解できるように含めました(知っておくと便利です^
)
一度学んだ正規表現は信じられないほど強力です。