2009-02-27 12 views
0

正規表現:問題作成のマッチングパターンこれに一致するように正規表現を考え出すいくつかの問題を抱えて

function Array() { [native code] } 

は、私が唯一の「アレイ」はここで発生しますテキストに一致しようとしています。

+0

あなたの質問は非常に不透明だと思います。 – Cerebrus

+0

それは私の文字列です。 「配列」のテキストが変更されます。だから私はそれにマッチさせようとしている。 – Geuis

+0

"function"と "()"の間でテキストを一致させようとしていますか? – Goran

答えて

4

変数がjavascriptでどのような型かを調べようとしていますか?それはあなたがちょうどあなたがそれを作成したと思うコンストラクタにオブジェクトのコンストラクタを比較することができますしたいものだ場合:

var array = new Array(); 
if(array.constructor == Array) 
    alert("Is an array"); 
else 
    alert("isn't an array"); 

これは本当にJavaScriptで物事を行くための最善の方法ではありません。 JavascriptにはC#のような型システムはありません。これは、JavaScriptがかなり動的な言語であり、オブジェクトがそのコンストラクタから取得するものは実行時に上書きできるため、変数が特定のコンストラクタによって作成された場合、

代わりに、それはダックタイピングを使用すると、彼らはむしろ彼らが何であるかよりも、何ができるか、あなたのオブジェクトを依頼する本当に良いでしょう: http://en.wikipedia.org/wiki/Duck_typing

if(typeof(array.push) != "undefined") 
{ 
    // do something with length 
    alert("can push items onto variable"); 
} 
+0

これは実際に私が試みていた問題を解決するのに役立ちました。私が私の意図を見ることを求めていたことを読んでいただきありがとうございます。 – Geuis

+0

+1精神的なデバッグのスキル。 :-) – Tomalak

3

Perlでは、あなたが使用したい:

m/^\s*function\s+(\w+)\s*\(/; 

変数 '$1は' 関数名をキャプチャします。

functionキーワードが行の先頭にない可能性がある場合は、少しずつ作業する必要があります。

[編集:2つの '\s*' 配列が追加されました。]


これが機能するかどうかについての質問を...ここに私のテストケースです:

テストスクリプト:

while (<>) 
{ 
    print "$1\n" if (m/^\s*function\s+(\w+)\s*\(/); 
} 

テスト入力行(はい、故意にミスアライン):

function Array() { ... } 
function Array2 () { ... } 
func Array(22) { ... } 

テスト出力:Solaris 10でのPerl 5.10.0(SPARC)でテストされて

Array 
Array2 

:私は、プラットフォームやバージョンが重要な要因であるとは考えていない - 私はそれが同じで動作するように期待Perlのもっともらしいバージョン。

+0

最初に\ s *を追加するのは難しいですか?そして、(\ w +)と\(?)の間に\ s *を追加するのは悪い考えではないかもしれません。 –

+0

@Chris:+1。私は同じことを提案するコメントボックスを開いた... – Swanand

+0

誰もが既にニックピッキングしているので、なぜ^と\ s *を含むの?この制約は必要ありません。単語境界がそれを行うべきであることを示す簡単な\ b関数です。最後の\ s *も必要ありません。どうしてマッチに続くの? – Tomalak

0

ので、その後、私はほとんど機能している、これを得ている:

[function\s]((\S+)+)(?=\(\)) 

しかし、これはまだ前のスペースに一致します。

+0

'['、 ']'を削除してください。 – Gumbo