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

JavaScriptでの正規表現マッチング


入力文字列strとパターンpが与えられたとすると、をサポートする正規表現マッチングを実装する必要があります。および*。

これらの記号の機能は-

である必要があります
  • 。 ->任意の1文字に一致します。

  • *->先行する要素の0個以上に一致します。

マッチングは、入力文字列全体(部分的ではない)をカバーする必要があります。

  • strは空で、小文字のa〜zのみが含まれている可能性があります。

  • pは空である可能性があり、小文字のa〜zとのような文字のみが含まれます。または*。

例-

入力が-

の場合
const str = 'aa';
const p = 'a';

その場合、aは文字列aa全体と一致しないため、出力はfalseになります。

以下はコードです-

const regexMatching = (str, p) => {
   const ZERO_OR_MORE_CHARS = '*';
   const ANY_CHAR = '.';
   const match = Array(str.length + 1).fill(null).map(() => {
      return Array(p.length + 1).fill(null);
   });
   match[0][0] = true;
   for (let col = 1; col <= p.length; col += 1) {
      const patternIndex = col - 1;
      if (p[patternIndex] === ZERO_OR_MORE_CHARS) {
         match[0][col] = match[0][col - 2];
      } else {
         match[0][col] = false;
      }
   }
   for (let row = 1; row <= str.length; row += 1) {
      match[row][0] = false;
   }
   for (let row = 1; row <= str.length; row += 1) {
      for (let col = 1; col <= p.length; col += 1) {
         const stringIndex = row - 1;
         const patternIndex = col - 1;
         if (p[patternIndex] === ZERO_OR_MORE_CHARS) {
            if (match[row][col - 2] === true) {
               match[row][col] = true;
            } else if (
               (
                  p[patternIndex - 1] === str[stringIndex]
                  || p[patternIndex - 1] === ANY_CHAR
               )
               && match[row - 1][col] === true
            ) {
                  match[row][col] = true;
            } else {
               match[row][col] = false;
            }
         } else if (
            p[patternIndex] === str[stringIndex]
            || p[patternIndex] === ANY_CHAR
         ) {
               match[row][col] = match[row - 1][col - 1];
            } else {
               match[row][col] = false;
            }
         }
      }
      return match[str.length][p.length];
};
console.log(regexMatching('aab', 'c*a*b'));

出力

以下はコンソールでの出力です-

true

  1. JavaScriptでの名前付き関数式

    以下は、JavaScriptで名前付き関数式を実装するためのコードです。 例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Document</title> <style> &nb

  2. JavaScriptのyield*式/キーワード。

    yield *式は、別のジェネレーターまたは反復可能なオブジェクトを参照するために使用されます。 以下は、JavaScriptでyield*式/キーワードを実装するためのコードです- 例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /&g