【jQuery/JS】URLに特定の文字列が含まれているか判定する完全ガイド|indexOf・includes・正規表現・URLSearchParamsまで

現在の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.pathnamelocation.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=jsontab=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ローカル開発時と本番で動作を変えたいです。
Awindow.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を取得・操作する完全ガイドを参照してください。