143

g正規表現のフラグの意味は何ですか?

/.+/gとの違いは何/.+/ですか?

4

9 に答える 9

157

gグローバル検索用です。つまり、すべてのオカレンスに一致します。i通常、大文字と小文字を区別しないことを意味することもわかります。

参照:グローバル-JavaScript | MDN

「g」フラグは、文字列内のすべての可能な一致に対して正規表現をテストする必要があることを示します。

gフラグがないと、最初のテストのみが行われます。

于 2012-10-20T23:40:01.070 に答える
56

説明するJavascriptの例:

> 'aaa'.match(/a/g)
[ 'a', 'a', 'a' ]

> 'aaa'.match(/a/)
[ 'a', index: 0, input: 'aaa' ]
于 2013-07-27T23:50:36.693 に答える
14

gグローバル検索フラグです。

グローバル検索フラグにより​​、RegExpは文字列全体のパターンを検索し、指定されたパターンに一致するすべての出現箇所の配列を作成します。

/.+/gしたがって、との違い /.+/ は、gバージョンが最初の出現だけでなくすべての出現を検出することです。

于 2012-10-20T23:39:01.517 に答える
13

@matiskaが指摘したように、gフラグはlastIndexプロパティも設定します。

これの非常に重要な副作用は、一致する文字列に対して同じ正規表現インスタンスを再利用している場合、で検索を開始するだけなので、最終的に失敗することlastIndexです。

// regular regex
const regex = /foo/;

// same regex with global flag
const regexG = /foo/g;

const str = " foo foo foo ";

const test = (r) => console.log(
    r,
    r.lastIndex,
    r.test(str),
    r.lastIndex
);

// Test the normal one 4 times (success)
test(regex);
test(regex);
test(regex);
test(regex);

// Test the global one 4 times
// (3 passes and a fail)
test(regexG);
test(regexG);
test(regexG);
test(regexG);

于 2017-08-06T03:29:16.940 に答える
11

/.+/gとの間に違いはありません/.+/。どちらも文字列全体に一度だけ一致するためです。g正規表現が複数回一致する可能性がある場合、またはグループが含まれている場合は、が違います。この場合、グループ.match()の配列ではなく、一致の配列が返されます。

于 2012-10-21T00:11:44.770 に答える
8

すでに述べたgフラグの意味に加えて、それはregexp.lastIndexプロパティに影響を与えます。

lastIndexは、正規表現インスタンスの読み取り/書き込み整数プロパティであり、次の一致を開始するインデックスを指定します。(...)このプロパティは、正規表現インスタンスがグローバル検索を示すために「g」フラグを使用した場合にのみ設定されます。

参照:Mozilla Developer Network

于 2016-09-09T10:14:51.760 に答える
7
  1. g ->すべての一致を返します
  2. without g ->最初の一致を返します

例:

  1. '1 2 1 5 6 7'.match(/\d+/)を返します["1", index: 0, input: "1 2 1 5 6 7", groups: undefined]。ご覧のとおり、最初の一致のみを取得できます"1"
  2. '1 2 1 5 6 7'.match(/\d+/g)すべての一致の配列を返します["1", "2", "1", "5", "6", "7"]
于 2020-02-14T11:40:25.500 に答える
3

正規表現のGは、グローバル検索を定義します。つまり、すべての行のすべてのインスタンスを検索します。

于 2013-01-21T03:25:44.960 に答える
2

文字列に基づいた例を示します。文字列からすべてのオカレンスを削除したい場合。「helloworld」から「o」と「」の出現をすべて削除したい場合は、

"hello world".replace(/o/g,'');
于 2018-11-15T14:12:54.813 に答える