現在のURLに特定のキーワード・パス・パラメーターが含まれているかを判定することで、ページに応じたクラスの付与・コンテンツの表示切り替え・リダイレクト条件の制御などが実現できます。この記事では indexOf() から正規表現・URLSearchParams まで実用的な判定パターンを体系的に解説します。
この記事でわかること
- indexOf() / includes() でURLに文字列が含まれるか確認する基本
- URL全体・パスのみ・クエリ文字列・ハッシュを個別に確認する
- 正規表現で高度なパターンマッチングを行う
- URLSearchParamsで特定パラメーターの値を判定する
- 複数条件(AND・OR)のチェック
- 実用例:ページに応じてクラスを付ける・ナビをハイライトする
indexOf() / includes() でURL文字列を確認する基本
window.location.href でURL全体を取得し、文字列メソッドで含まれているかを確認します。jQueryは必須ではなくネイティブJavaScriptで完結します。
indexOf()を使う方法(IE11対応)
// 現在のURL例: https://codingls.com/jquery/1448/?tab=js#section1
var url = window.location.href;
// indexOf: 見つかれば0以上のインデックス、見つからなければ-1
if (url.indexOf('jquery') !== -1) {
console.log('jQueryカテゴリのページです');
}
// 大文字・小文字を区別しない場合はlowerCase()に変換してから確認
if (url.toLowerCase().indexOf('jquery') !== -1) {
console.log('大文字小文字を無視して確認');
}
includes()を使う方法(よりシンプル)
var url = window.location.href;
// includes: 含まれていれば true、含まれていなければ false
if (url.includes('jquery')) {
console.log('jQueryページです');
}
// 否定の確認
if (!url.includes('admin')) {
console.log('管理ページではありません');
}
indexOf()とincludes()の使い分け
- includes(): シンプルで読みやすい。IE11では未サポート
- indexOf() !== -1: IE11でも動作する。一致した位置(インデックス)も取得できる
- 現在(2024年以降)のWeb開発ではIE11サポートが不要なら
includes()推奨
URLの各パーツ別に判定する
window.location.href はURL全体を返すため、クエリパラメーターやハッシュも含まれます。意図しない部分での一致を防ぐためにパーツを分けて確認することが重要です。
// 現在のURL: https://codingls.com/jquery/1448/?tab=js&page=2#faq
// パス部分のみ確認(/jquery/1448/)
if (window.location.pathname.includes('jquery')) {
console.log('パスにjqueryが含まれる');
}
// クエリ文字列のみ確認(?tab=js&page=2)
if (window.location.search.includes('tab=js')) {
console.log('tabパラメーターがjsに設定されている');
}
// ハッシュのみ確認(#faq)
if (window.location.hash.includes('faq')) {
console.log('FAQセクションへのアンカーリンク');
}
// ホスト名のみ確認(開発環境と本番環境の切り分けなど)
if (window.location.hostname === 'localhost') {
console.log('ローカル開発環境');
}
URLの一部にしか含まれない文字列に注意
例えば
例えば
url.includes("page") は、パスに「page」が含まれる場合でも、クエリの ?page=2 の場合でも true になります。意図した場所のみを確認したい場合は location.pathname や location.search など特定のパーツを使ってください。正規表現で高度なパターンマッチングを行う
単純な文字列一致では対応できない複雑なパターンは正規表現で確認します。
var path = window.location.pathname;
// /jquery/(数字)/ というパスかどうか確認
if (/\/jquery\/\d+\//.test(path)) {
console.log('jQuery記事のURLパターンです');
}
// 特定のカテゴリページ(/jquery/ または /typescript/)
if (/\/(jquery|typescript)\//.test(path)) {
console.log('jQueryまたはTypeScriptカテゴリです');
}
// パスが /category/ で始まるか確認
if (/^\/category\//.test(path)) {
console.log('カテゴリアーカイブページです');
}
// 大文字小文字を無視するフラグ(i)
if (/jQuery/i.test(window.location.href)) {
console.log('大文字小文字を区別しないでjqueryを検索');
}
URLSearchParamsで特定パラメーターの値を判定する
クエリパラメーターの値を正確に確認するにはURLSearchParams を使うのが最も確実です。includes("tab=js") だと tab=json でも一致してしまいます。
var params = new URLSearchParams(window.location.search);
// tabパラメーターが正確に'js'かどうか確認
if (params.get('tab') === 'js') {
console.log('JavaScriptタブが選択されています');
}
// パラメーターが存在するかどうか(値は問わない)
if (params.has('debug')) {
console.log('デバッグモードが有効です');
}
// 複数パラメーターの同時確認
var isFiltered = params.has('category') && params.has('tag');
if (isFiltered) {
console.log('カテゴリとタグ両方で絞り込まれています');
}
includes()では完全一致を保証できない
url.includes("tab=js") は tab=json や tab=jsx でもtrue を返してしまいます。パラメーターの値を正確に確認するには URLSearchParams.get("tab") === "js" を使ってください。URLSearchParamsの詳細はURLを取得・操作する完全ガイドを参照してください。複数条件(AND・OR)のチェック
var url = window.location.href;
var path = window.location.pathname;
// AND条件: パスに「jquery」を含み、かつクエリに「page」を含む
if (path.includes('jquery') && window.location.search.includes('page')) {
console.log('jQueryのページネーション付きページ');
}
// OR条件: 「jquery」または「typescript」を含む
if (path.includes('jquery') || path.includes('typescript')) {
console.log('プログラミング言語系の記事');
}
// 配列で複数キーワードを一括チェック(ANY: いずれか1つでも含む)
var keywords = ['jquery', 'javascript', 'typescript'];
var matchesAny = keywords.some(function (kw) {
return path.includes(kw);
});
// 配列で複数キーワードを一括チェック(ALL: 全て含む)
var requiredKeywords = ['jquery', 'guide'];
var matchesAll = requiredKeywords.every(function (kw) {
return url.includes(kw);
});
実用例:ページに応じてクラスを付与する・ナビをハイライトする
URLの判定結果を使ってjQueryで要素を動的に操作する実用的なパターンです。
現在のページのナビリンクをアクティブにする
$(function () {
var path = window.location.pathname;
// ナビのリンクとURLのパスが一致する項目にis-activeクラスを付ける
$('.nav-link').each(function () {
var linkHref = $(this).attr('href');
if (linkHref && path.includes(linkHref) && linkHref !== '/') {
$(this).addClass('is-active');
}
});
});
特定ページだけ要素を表示・非表示にする
$(function () {
var path = window.location.pathname;
// TOPページ(/)のみバナーを表示
if (path === '/') {
$('#top-banner').show();
}
// jQueryカテゴリのページでサイドバーウィジェットを表示
if (path.includes('/jquery/')) {
$('#jquery-sidebar').show();
}
// 記事ページ(カテゴリ/ID形式)でシェアボタンを表示
if (/\/\w+\/\d+\//.test(path)) {
$('#share-buttons').show();
}
});
URLパラメーターに応じてタブを切り替える
$(function () {
var tab = new URLSearchParams(window.location.search).get('tab');
if (tab) {
// 対応するタブをアクティブにする
$('.tab-btn').removeClass('is-active');
$('.tab-btn[data-tab="' + tab + '"]').addClass('is-active');
$('.tab-panel').hide();
$('#tab-' + tab).show();
}
});
判定方法の比較と使い分け
| 方法 | IE11 | パターン | 向いているケース |
|---|---|---|---|
url.indexOf(str) !== -1 |
◎ | 部分一致 | IE11対応が必要な場合 |
url.includes(str) |
△ | 部分一致 | シンプルに書きたい場合(推奨) |
/pattern/.test(url) |
◎ | 正規表現 | 複雑なパターン・大文字小文字無視・数字マッチなど |
URLSearchParams.get(key) |
△ | パラメーター値の完全一致 | クエリパラメーターの値を正確に取得・比較する場合 |
location.pathname === str |
◎ | 完全一致 | TOPページなど特定のパスのみに一致させたい場合 |
まとめ
URLに文字列が含まれているか判定する方法は用途に応じて選びます。
- シンプルな部分一致:
location.href.includes("keyword") - パスのみ・クエリのみなど範囲を絞る:
location.pathname/location.search - 複雑なパターン: 正規表現
/pattern/.test(url) - パラメーターの値を正確に確認:
new URLSearchParams(location.search).get("key")
関連記事: URLを取得・操作する完全ガイド / addClass/removeClass/toggleClass完全ガイド
よくある質問(FAQ)
Qincludes()がIE11で動きません。
AIE11は
String.prototype.includes() をサポートしていません。indexOf(str) !== -1 に書き換えることで同じ結果が得られます。または Object.defineProperty でポリフィルを追加することもできます。2024年以降の多くのプロジェクトではIE11サポートは不要なため、includes() の使用を推奨します。Q大文字・小文字を区別せずに確認したいです。
A比較前にURLを
toLowerCase() で小文字に変換してから確認してください:url.toLowerCase().includes("keyword")または正規表現で i フラグを使います:/keyword/i.test(url)Qローカル開発時と本番で動作を変えたいです。
A
window.location.hostname でホスト名を確認して条件分岐できます:if (location.hostname === "localhost" || location.hostname === "127.0.0.1") { /* 開発環境 */ }また location.port でポート番号も確認できます。QURLではなくリンクのhref属性に特定の文字列が含まれているか確認したいです。
Aリンク要素の
または
href 属性を取得して確認してください:$("a").each(function() { var href = $(this).attr("href"); if (href && href.includes("keyword")) { ... } });または
$("a[href*='keyword']") のCSSセレクターで直接フィルタリングする方法もあります。QAjaxで読み込んだページのURLを確認したいです。
AAjax(部分読み込み)ではページ遷移が発生しないため、
window.location.href は変化しません。SPAでURLを変更するには history.pushState() を使います。pushStateでURLを変更した後は window.location.href で新しいURLを取得できます。URLの操作全般についてはURLを取得・操作する完全ガイドを参照してください。