JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

JavaScriptで文字列が特定の文字列で始まるか・終わるかを判定する関数の書き方

本記事では、2つの文字列を引数として受け取るJavaScript関数の実装方法を解説します。それぞれの引数を str1str2 と呼びます。

この関数の役割は、str1がstr2で始まるか、またはstr2で終わるかを判定することです。いずれかの条件に一致すれば true を返し、どちらにも一致しなければ false を返します。

実装のポイント

判定処理では、以下のロジックを使用します。

  • まず、str2 の長さが str1 よりも長い場合は、開始・終了のいずれにもなり得ないため false を返します。
  • 両者の文字列が完全に一致する場合は true を返します。
  • substring() メソッドを使って、str1 の先頭部分と末尾部分を str2 と同じ長さで切り出し、それぞれが str2 と一致するかどうかを比較します。

サンプルコード

以下が実際のコードです。

const str = 'this is an example string';
const startsOrEndsWith = (str1 = '', str2 = '') => {
   if(str2.length > str1.length){
      return false;
   };
   if(str1 === str2){
      return true;
   };
   const { length: l1 } = str1;
   const { length: l2 } = str2;
   const startPart = str1.substring(0, l2);
   const endPart = str1.substring(l1 - l2, l1);
   return startPart === str2 || endPart === str2;
};
console.log(startsOrEndsWith(str, 'hel'));
console.log(startsOrEndsWith(str, 'ing'));
console.log(startsOrEndsWith(str, 'thi'));

実行結果

コンソールには次の出力が表示されます。

false
true
true

コードの解説

  • 'hel' は文字列の先頭でも末尾でもないため false が返されます。
  • 'ing' は末尾(...string)と一致するため true が返されます。
  • 'thi' は先頭(this...)と一致するため true が返されます。

なお、モダンなJavaScriptでは String.prototype.startsWith() および String.prototype.endsWith() メソッドを使うことで、同様の判定をより簡潔に記述できます。ただし、この自作関数のアプローチは、文字列操作の基礎的な仕組みを理解するうえで非常に有益です。

  1. JavaScriptのSymbol.for()関数とは?グローバルシンボルレジストリの仕組みと使い方

    Symbol.for()関数は、ランタイム全体で共有されるグローバルシンボルレジストリから、指定されたキーに対応するシンボルを検索するための関数です。 検索の結果、該当するシンボルがすでに登録されていればそれを返し、存在しない場合は新しいシンボルをレジストリに登録したうえで返します。この仕組みにより、異なるスコープやモジュール間でも同じキーを持つシンボルを共有できるようになります。 Symbol.for()とSymbol()の違い 通常のSymbol()呼び出しは、同じ引数を渡しても毎回まったく別の新しいシンボルを生成します。一方、Symbol.for(key)は同じキーを渡せば必ず同じシンボ

  2. JavaScriptで文字列が回文かどうか判定する方法(句読点・大文字小文字への対応)

    与えられた文字列が回文(パリンドローム)であれば true を、そうでなければ false を返すJavaScript関数の作成方法を紹介します。 回文判定時の注意点 文字列が回文かどうかを正しく検証するためには、以下の条件を考慮する必要があります。 句読点や記号は削除し、すべての文字を小文字に変換してから判定を行います。 大文字と小文字は区別しません。たとえば「racecar」「RaceCar」「race CAR」なども、すべて同じ回文として扱います。 コード例 以下が実際のコードです。 { const regex = /[^A-Za-z0-9]/g; str = st