blog

JS正規表現のヒント

はじめに\njsのマッチは、多くの場合、仕事で使用されるjsのより重要な概念ですが、多くの場合、非常に明確に記憶されていないか、またはいくつか忘れて、このレコードは、彼らが印象を深めるだけでなく、パー...

Aug 23, 2020 · 7 min. read
シェア

序文

jsの一致は、jsのより重要な概念であり、多くの場合、仕事で使用されますが、しばしば非常に明確に記憶されていない、またはいくつかの忘れて、このレコードは、彼らの印象を深めるだけでなく、パートナーのためのデータ場所へのアクセスを提供するように、要約します。

正規表現構文

:文字量形式

let reg = /\bis\b/; let string = 'it is a cat'; console.log(string.replace(reg, 'vvv'));

:コンストラクタのインスタンス化

let reg = new RegExp('\\bis\\b', 'g'); // バックスラッシュはエスケープする必要があるので、2つの\\ let string = 'it is a cat'; console.log(string.replace(reg, 'vvv'));

正規表現の一般的な構文

: モディファイア

// グローバル検索 let reg = /\bis\b/g; let string = 'it is a cat, he is a boy'; console.log(string.replace(reg, 'vvv')); // ケースを無視する let reg = /\bis\b/gi; let string = 'it is a cat, he IS a boy'; console.log(string.replace(reg, 'vvv')); // 改行マッチング // 改行マッチングとは、それぞれの行を先頭または末尾としてマッチさせることを意味する。^,$で使用する。 let string = `aaan tttt`; let reg = /an/; string .match(reg);

: メタキャラクター

:非印字文字を示します。

改行文字にマッチ
キャリッジリターン
\tタブにマッチ
\vタブにマッチ
\f改ページ
\b単語境界の一致
\B非単語境界のマッチング

: 集合と範囲の表現

.改行以外の文字
とは
[]また、[abc]はa,b,cのいずれかにマッチします。
\d0-9]などの任意の数字にマッチします。
\D数字以外の文字、つまり [^0-9] にマッチします。
\s任意の空白文字にマッチ。
\S空白以外の文字にマッチ。
\w任意の数字、文字、アンダースコア、すなわち[0-9a-zA-Z_]にマッチします。
\W数字、文字、アンダースコア以外、すなわち[^0-9a-zA-Z_]にマッチします。

: 量子体の表現

*0、1、またはそれ以上の一致を示します。
+1つ以上の一致を示します。
?0または1の一致
{n}n回マッチ
{n,}n回一致、またはn回以上一致することを意味します。
{n, m}少なくともn回、最大m回マッチすることを意味します。

: 境界制御とモード単位の表現

^手始めに
$了い
[^]括弧の中の^はnotを意味し、[^0-9]は0-9以外の文字にマッチすることを意味します。
内部全体が1つの文字として扱われます。

正規マッチングパターン

正規マッチングモードは2種類に分かれて、1つは貪欲なモードであり、他の非貪欲なモードです貪欲なモード:できるだけ一致するように曖昧さに遭遇したときに非貪欲なマッチング:曖昧さに遭遇したときに一致する時間に一致するように一致するように一致する結果はjsのデフォルトと一致しません一致するように貪欲なマッチングモードは、非貪欲なモードに貪欲なモードは、ちょうど?の追加後の単語の量で貪欲な量化子を必要とする貪欲なモードです。追加:正規マッチングの?の正規マッチング

let reg = /\d??/; let string = ''; console.log(string.replace(reg, 'haha'));

レギュラー・マッチングの前方視と後方視の概念

積極的な肯定的検索、何かが続かなければなりません。
正負のルックアップ、後に何も続きません
非キャプチャパケット、つまりパケットが$1,$2,....に
逆アファーマティブ・ルックアップ、キャプチャなし
逆否定の条件検索
グループに名前を付けます。
レギュラー・マッチングの新機能
let string = 'a1dvb'; let reg = /\w(?=\d)/; console.log(string.replace(reg, '---'));

特性

最初の2つはマッチせず、彼は条件としてのみ使用されます。

// グループがマッチし、キャプチャされる let string = 'a1b3c4'; let reg = /(\w)(\d).+/; //プラス記号を取り除くと違いが出る string = string.replace(reg, '$1$2'); console.log(string); //a1 // グループはマッチするがキャプチャされない let string = 'a1b3c4'; let reg = /(?:\w)(\d).+/; // プラス記号を取り除くと違いが出る string = string.replace(reg, '$1$2'); console.log(string); // 1$2 // グループはマッチもキャプチャもされず、条件としてのみ使用される。 let string = 'a1b3c49tt'; let reg = /(\d)(?=\d).+/; // プラス記号を取り除くと違いが出る string = string.replace(reg, '$1$2'); console.log(string); // 4$2

マッチングの原則 ---- 個人の概要

1: どのメタ文字も、量化子を書かずに一度だけマッチします。

2: 量子体の書き込み、デフォルトは貪欲なマッチング

3: 正規マッチは、グローバルな g

4: マッチングルールに従った正規マッチング もし中間中断がマッチングされず、文字列がマッチングされない場合、マッチングルールに従ったマッチングを継続し、再マッチングを行います。

5: 多くの結果がマッチした場合、最後にマッチした結果のみがキャプチャされます。

6: 量化詞は直前のメタ文字にのみ作用します。

正規マッチングに関する4つの機能

規則的なオブジェクトの5つの特性

1:source 2:global 3:ingoreCase 4:multiline 5:lastIndex

globalは読み取り専用のブール値で、グローバルな
ingoreCaseは読み取りのみのブール値で、大文字小文字を区別しない修飾子があるかどうかを表します。
multilineは読み取り専用のブーリアン値で、改行修飾を行うかどうかを表します。
sourceはマッチルールそのもののテキストです。
lastIndexグローバル検索であれば、この属性の値は、マッチした文字の次の文字のインデックスに対応する値です。
let reg = /\d/gmi; console.log(reg.source); // \d console.log(reg.global); // true console.log(reg.ignoreCase); // true console.log(reg.multiline); // true console.log(reg.lastIndex); 0

機能1:テスト

文字列が正規マッチングルールに合致していれば true を返しますが、 正規マッチングにグローバルワードが含まれている場合、 正規マッチングが lastIndex から始まり、グローバルケースが実行されるたびに lastIndex が変更されるため、何度も実行するとエラーを報告します。

let reg = /\d/g; let string = '1234'; console.log(reg.test(string)); // グローバル et reg = /\d/g; let string = '12'; console.log(reg.test(string)); // true console.log(reg.test(string)); // true console.log(reg.test(string)); // false

機能2:実行

マッチしない場合は null が返され、マッチする場合は配列が返されます。 exec メソッドが返す配列の 0 番目の要素は、正規表現にマッチするテキストです。

最初の要素は、正規表現がマッチする最初の部分式にマッチするテキストです。

2番目の要素は、正規表現がマッチする2番目の部分式にマッチするテキストです。

...

などです。index: マッチするテキストの最初の文字のインデックス位置 input: マッチするテキスト groups: 名前付きグループ exec は常に最初のマッチだけを返すので、グローバルに同じです。

let reg = /(\w)(\d)(\d)/; let string = 'a'; reg.exec(string); //  ["a11", "a", "1", "1", index: 0, input: "a", groups: undefined] let reg = /(?<json>\w)(?<tiantian>\d)(?<jianwu>\d)/; let string = 'a'; reg.exec(string);

機能3:マッチ

nullが返されたときにマッチが見つからなかった場合、配列が見つかれば、matchメソッドは最初の0個の要素が正規表現のテキストとマッチした配列を返します。

最初の要素は、正規表現がマッチする最初の部分式にマッチするテキストです。

2番目の要素は、正規表現がマッチする2番目の部分式にマッチするテキストです。

...

などです。非グローバルの場合、このメソッドはexecと全く同じですが、グローバルの場合、その違いは非常に大きく、グローバルの場合、マッチした結果のみを返し、lastIndexは常に0、マッチしなかった場合はnullを返します。globalの場合は、マッチした結果のみを返し、 lastIndexは常に0、マッチしなかった場合はnullを返します。

let reg = /(\w)(\d)(\d)/g; let string = 'a'; string.match(reg); // ["a11", "a23"]

機能4:置換

このメソッドは文字列を置き換えるために使われます。最初のパラメータは正規表現で、2番目のパラメータは文字列か関数です。

let string = '1a2a'; let reg = /\d+/; string.replace(reg, '--'); // "--a2a" // グループ化フォームをキャプチャする let string = '1a2a'; let reg = /(\d).+/; string.replace(reg, '$1'); // 1 // 関数形式 let string = 'a11ab22b'; let reg = /(\w)(\d)(\d)/; string.replace(reg, (match, firstP, secondP, thirdP, index, string) => { console.log(match); console.log(firstP); console.log(secondP); console.log(thirdP); console.log(index); console.log(string); return 22 }) // a a11ab22b 関数の場合、最初の引数はマッチするテキストである。 最後のいくつかの引数は、対応するグループのマッチング・テキストである。 末尾の文字は、マッチしたテキストの最初の文字のインデックスである。 最初のパラメータはマッチするテキストである。

アペンド

正規マッチングテストツール

Read next

ウェブの作業メカニズム

Webサイトの設計では、純粋なHTML形式のWebページは、多くの場合、 "静的なWebページ "と呼ばれ、静的なWebページは、画面上のビューの形で表示されるようにブラウザによってレンダリングすることができる標準的なHTMLファイルです。静的ウェブページは、Ajaxのような技術なしではサーバーとやり取りすることができません。 ですから

Aug 23, 2020 · 1 min read