RegExp オブジェクトのセマンティクスと使用法:
文字列の一致を確認し、文字列の内容の一部を取得し、元の文字列に基づいて新しい文字列を構築します (追加、削除、変更を含む)。
RegExp オブジェクトを構築するには主に 2 つの方法があります。
/w/g などのリテラルを使用する
new RegExp(/w/) などのコンストラクターを使用します。
RegExp オブジェクトを構築するときに注意すべき点がいくつかあります。
リテラルは、ランタイムによって生成されない静的 RegExp オブジェクトを構築するためによく使用されます。
リテラルの直後にフラグを追加して、一致する文字列の実行結果を制限できます。一般的に使用されるフラグには g と i があり、それぞれグローバル一致 (グローバル) と大文字小文字を区別しない一致 (大文字と小文字を区別しない) を表すために使用されます。
RegExp コンストラクターの最初のパラメーターはオブジェクトのパターンを提供します。パターンが RegExp リテラルの場合、2 番目のパラメーター (つまり、フラグの指定) は提供できません。 pattern が文字列の場合、2 番目のパラメータを使用できます。
RegExp コンストラクターは、ランタイムによって生成される動的な RegExp オブジェクトを構築するためによく使用されます。
RegExp のパターンが文字列の場合、文字列内の「」をエスケープする必要があるため、リテラル内のすべての「」を「\」として記述する必要があります。そのため、/w/ == となります。 /w/Return false
RegExp オブジェクト関連関数:
文字列の一致をチェックするには、文字列が regExp によって提供されるパターンと一致するかどうかをチェックする regExp.test(string) メソッドを使用できます。 string.search(regExp) メソッドを使用することもできます。このメソッドは、2 つが一致しない場合に -1 を返します。
文字列の一部を取得するには、regExp.exec(string) メソッドを使用できます。また、元の文字列に新しい文字列を構築するには、通常、string.replace(searchValue,) を使用します。 replaceValue) メソッド
パターンのセマンティクスは RegExp オブジェクトで提供されます。RegExp
は「|」で区切って複数の Alternative を定義できます。この操作は最も優先度が低いため、「|」が存在する場合、まず各 Alternative が複数の部分に分割されます。用語の部分で構成され、用語はアサーション (位置限定に使用)、アトム (照合単位)、および量指定子付きアトム (修飾子) に分けられます。
アサーションは、文字列の先頭と一致するために使用される "^" に分割されます (つまり、フラグに m が含まれる場合)。また、行の先頭と一致するために "$" が使用されます。 multiInput (つまり、フラグに m が含まれる場合) では、「b」を使用して w と W の間隔を一致させることもできます。文字列内の任意の内容ですが、位置の一致を判断するためにのみ使用されます。
アトムの状況はより複雑です。まずアトムの量子を見てみましょう。これには * + ? {n} {m,} {m,n} が含まれます。ここで、* はアトムが 0 個以上の繰り返しを持つことを意味し、+ は繰り返しを意味します。 1 回以上 上記の繰り返しの場合、? は 0 回または 1 回を意味し、{n} はちょうど n 回の繰り返しを意味し、{m,} は m 回以上の繰り返しを意味し、{m,n} は繰り返しの回数が m から n の間であることを意味します( m と n )、上記の量指定子の後に ? を続けて非貪欲モードを開始することもできます。このモードの意味については後で説明します。
Atom には patternCharacter (通常の文字、つまりパターンに特別なセマンティクスを持たず、文字通り一致する文字) が含まれています。
「.」は行終端文字以外のすべての文字に一致します
AtomEscape には数値 1 が含まれます (前のかっこ内の一致が成功したことを示すために使用されます)。一部の文字への参照 n f r t v xNN uXXXX cX など。 d D s S w W など、特別な意味を持つ一部の文字
CharacterClass には [...] と [^...] の 2 つの形式が含まれます。 -、n、その他の文字参照、b、d、その他の特殊な意味の文字など、多くの文字を含めることができます。 「-」の周囲に文字がある場合、意味が特定の文字から特定の文字に変わることに注意してください。 「-」の左側または右側に文字がない場合、「-」はダッシュ文字のみを表します。
(グループ) の場合、上記のモードでグループ化を実行する場合、グループの後に Quantifier を使用して変更できます。
(?:group)、グループとしてのみ使用され、グループに一致するコンテンツは記録されず、1..には含まれません。n
(?=group)、一致が必要ですが、返される一致文字列にグループ一致コンテンツは含まれません。
(?!group) は照合を必要とせず、返される照合文字列にグループ照合内容は含まれません。 次に、RegExp の 2 つの重要な動作モードについて説明します。
代替照合は、常に左から右に行われます。最初の一致では、/ab|abc/.exec("abc") などの後続の一致は試行されなくなります
。上記の文字列「abc」はパターン内の ab にのみ一致し、一致する場合は常に
abc には一致しません
。 ? を Quantifier の後に追加しない場合は、greedy モードが使用されます。たとえば、/w+bc/.exec("abcbcbc") と一致する
場合は、greedy モードが使用されます。
常に最初にできるだけ多くの一致に一致するため (すなわち、greedy モード)、「abcbcbc」に一致するようになります。これを
/w+?bc/.exec("abcbcbc") に変更すると、可能な限り少数の一致が行われます。つまり、非貪欲モード)、「abc」にのみ一致します。
一般的な文字列解析要件の場合、通常、exec メソッドまたは match メソッドを使用して解析できます。文字列が大きい場合、RegExp は while および他のステートメントと組み合わせると非常に強力です。
既存の文字列を変更して別の文字列に変換する場合は、通常、このメソッドが RegExp で最も重要なメソッドであると考えています。その多態性により、ほとんどすべての形式に対応できます。文字列を変更する必要がある。