2012-03-28 31 views
3

私は文字列SUM([A2:A10],[B2:B10],[C2:C10],[D2:D10])を持っており、配列内に[A2:A10],[B2:B10],[C2:C10],[D2:D10]という要素を取得する必要があるので、私はmatch()をjsで使用しました。コードスニペットはJavaScriptでの正規表現の一致

var formula = "SUM([A2:A10],[B2:B10],[C2:C10],[D2:D10])"; 
var reg = /\[(a-zA-Z0-9)+\]/; 
matches = formula.match(reg); 

ですが、一致しません。正規表現が間違っていることを願っています。私は正規表現を構築することに非常に貧しいです。正しい正規表現は何でしょうか?

+0

他のコード、jfriend00、ZER0、Diode、Anony-Mousse、Josephありがとうございました! –

答えて

10

このようにそれを試してみてください。

var formula = 'SUM([A2:A10],[B2:B10],[C2:C10],[D2:D10])'; 
var reg = /\[\w+:\w+\]/g; 
matches = formula.match(reg); 

出力:

["[A2:A10]", "[B2:B10]", "[C2:C10]", "[D2:D10]"] 

はあなたの正規表現は正しい方向にあったが、コロンと撮影し、個々の文字が含まれていませんでした。私が使用した\wエスケープシーケンスは、単語文字([a-zA-Z0-9_])のショートカットで、読みやすくしています。 gフラグは、最初のものではなくすべての一致を得るために必要です。

+0

+1私に – tusar

1

正規表現にはコロン:は含まれていません。

これを試してください:/\[([0-9A-Z:]+)\]/、特に引用符と引用符で囲まれていない大括弧がある理由

さらに、入力文字列は引用符で囲まれていません。

2
var formula = "SUM([A2:A10],[B2:B10],[C2:C10],[D2:D10])"; 
var reg = /\[.*?\]/g; 
matches = formula.match(reg); 
+0

正規表現を説明できますか? –

+0

@JaisonJustus: '。*'は基本的に '何にもマッチする'を意味し、 '?'は量指定子を遅延させた後に残りの入力文字列にもマッチしませんが、 。 –

+0

\\ [ - パターンは[、\\]で始まり、パターンは]で終わります。 - 任意の文字にマッチする、* - ゼロ以上、? - []の各ブロックにマッチする – Diode

1

私は引用符を忘れてしまったと思います。 また、必要なのはグローバルフラグです。ここでは、コード:

var formula = "SUM([A2:A10],[B2:B10],[C2:C10],[D2:D10])"; 
var reg = /\[[0-z]+:[0-z]+\]/g; 
var matches = formula.match(reg); 
2
var str = "SUM([A2:A10],[B2:B10],[C2:C10],[D2:D10])"; 

var matches = str.match(/\[[A-Z0-9:]+\]/g); 
alert(matches);​ 

注意、あなたはすべての一致を得るために、正規表現にgフラグを使用します。あなたはここで働いて、それを見ることができます

:あなたが必要http://jsfiddle.net/jfriend00/aTrLU/

+0

+1を紹介するために+1私の表現よりも簡単です –

2

正規表現がg修飾子は、単に最初の

ない、我々はグローバルmtchingを行うと、すべての結果を返す必要があることを示し

/\[[A-Z][0-9]+:[A-Z][0-9]+\]/gi 

です

私修飾子は、我々は、大文字と小文字を区別しない

を作ったの仮定はあなたがしたくないことをされて、一致が必要であることを示しています追加のセミコロンのために[E2:E10:]を追加

+0

いいです。ありがとうございました –