2

私は非常に単純なコードを持っています:

var allTypes = "restaurant|dentist";
var typeSplitter = new RegExp("([a-zA-Z]+)");
typeSplitter.exec(allTypes);

次のような配列が必要です。

[「レストラン」、「歯医者」]

しかし、代わりに私はこれを取得します:

【「レストラン」、「レストラン」】

ここで正規表現をテストしました。私はこれを長い間いじっていましたが、おそらく私が知らないことです

4

2 に答える 2

9

これをするだけ

allTypes.split('|');
// => ['restaurant', 'dentist']

.split正規表現を取ることもできます。この場合は必要ありませんが

allTypes.split(/[|]/);

しかし、本当に正規表現を使用してキャプチャしたい場合は、使用する必要があります.match

matches = allTypes.match(/([a-zA-Z]+)/g); // g = global modifier
于 2012-12-21T20:31:43.270 に答える
4

exec1 つの一致とすべてのキャプチャのみを返すためです。最初の要素は完全一致です。2 番目は最初のキャプチャ (パターン内の最初の括弧のセット) です。パターン全体を括弧で囲んだため、これらの値は一致します (括弧は不要です)。代わりmatchにグローバル修飾子を使用します。

var result = "restaurant|dentist".match(/[a-zA-Z]+/g);

より複雑なパターンがあり、一致ごとにキャプチャ グループが必要な場合exec、この方法をお勧めします。execただし、グローバル修飾子を使用してループで実行する必要があります。

var regex = /your(Pattern)here/g;
var m;
while (m = regex.exec(input))
{
    var entireMatch = m[0];
    var firstCapture = m[1];
    // ...
    // process results
}
于 2012-12-21T20:34:20.310 に答える