1

この正規表現は Java 環境では期待どおりに動作しますが、Javascript では正しく動作させることができません。

/^(?:select\s+)?(?:([\w\d]+)?\.?([\w\d]+))?(?:\s*\,\s*)?(?:([\w\d]+)?\.?([\w\d]+))?(?:\s*from\s+)([\w\d\.]+)\s*([\w\d]+)?$/g

この式は、次の種類の入力行に一致する必要があります。

select a.id, a.name from public.blah a

select a, a.name from public.blah a

select id, name from blah

a.id, name from brah a

from blah a

そして、私が期待するグループについて:

1: 最初の射影エイリアス (a) がある場合

2: 最初の射影属性 (id) (存在する場合)

3: 2 番目の射影エイリアス (a) がある場合

4: 2 番目の投影属性 (名前) (存在する場合)

5: リレーション名 (public.blah)

6: 関係エイリアス (a) ある場合

正規表現は Javascript で一致していますが、グループを取得できません。これを機能させるには、これを変更する必要があるものがあるに違いありません。

var optionsPattern = /^(?:select\s+)?(?:([\w\d]+)?\.?([\w\d]+))?(?:\s*\,\s*)?(?:([\w\d]+)?\.?([\w\d]+))?(?:\s*from\s+)([\w\d\.]+)\s*([\w\d]+)?$/g;

var text = 'select id, text from options.test';

var match = text.match(optionsPattern);

if(match) {
  alert(match[0]); // select id, text from options.test
  alert(match[1]); // undefined 
}

これについて何を変更する必要があるかについての手がかりはありますか?

ありがとうございました!

4

1 に答える 1

2

gフラグを削除します。正規表現を「一致してサブパターンを返す」から「すべての一致を検索して返す」に変更しています

于 2013-03-03T20:54:17.083 に答える