2016-04-11 8 views
-1

this Regex(\w*)\s*\([(\w*),]*\)の目的は、関数名とその引数を取得することです。例えば正規表現による式の名前と引数の解析

f1 (11,22,33)

与えられた正規表現は、四つの要素キャプチャする必要があります。この正規表現と間違って何

f1 11 22 33

を?あなたがここsplitでそれを行うことができます

+0

引数の空白をキャプチャしているようです。また、 '(\ w *)'は長さがゼロのシーケンス(空白)を示すので、この正規表現はカンマのリストとして引数として取り込むことができます。関数の最後の引数は、カンマの後に続く必要があります。最後の引数に別のグループを追加する必要があります。 – Evert

+0

あなたは '[]'の中で特殊文字を使うことはできません。また、これに正規表現を使用しないでください – hop

+0

文字セット内でグループ化括弧を使用することはできません。 – Evert

答えて

1

javascript

var ar = str.match(/\((.*?)\)/); 
if (ar) { 
    var result = ar[0].split(","); 
} 

参考例である:https://stackoverflow.com/a/13953005/1827594

+0

お返事ありがとうございます、あなたの答えは私に近いです。https://regex101.com/r/pX0nQ6/7 – ps0604

0

上記のコメンターが言っているようないくつかの事が

:-)正規表現のために懸命にあり、 '*'はあまりにもゆるいことがあります。ゼロ以上を意味します。したがってfoo(,,)も一致します。あまりよくない。

(\w+)\s*\((\w+)(?:,\s*(\w+)\s*)*\) 

これは、私が思うところに近いです。それを打ち破ろう。

\w+ <-- The function name, has to have at least one character 
\s* <-- zero or more whitespace 
\( <-- parens to start the function call 
(\w+) <-- at least one parameter 
(?:) <-- this means not to save the matches 
,\s* <-- a comma with optional space 
(\w+) <-- another parameter 
\s* <-- followed by optional space 

これは、Pythonからの結果である:

>>> m = re.match(r'(\w+)\s*\((\w+)(?:,\s*(\w+)\s*)*\)', "foo(a,b,c)") 
>>> m.groups() 
('foo', 'a', 'c') 

しかし、どのようなこのようなものについて:

foo(a,b,c 
    d,e,f) 

?ええ、それは正規表現で速くなり、より豊かな構文解析ツールに移行します。

+0

あなたの正規表現に問題があります。https://regex101.com/r/pX0nQ6/5を参照してください。 – ps0604

+0

うん、喜び家に帰る前に質問に答えようとすること。 –

+0

正規表現 – ps0604

関連する問題