2011-01-10 6 views
0

これをいくつかのRegExビルダーを使って実行した後で、私がしたいことをしているように見えます...しかし、実際に試して実装しようとすると決して動作しません。Javascript RegEx for boundries

これは私が使用している表現です:(?<=\[)[0-9]+(?:\.[0-9]*)?(?=\])

を私の理解からは、これは[]記号の間の任意の数字に一致するようになっています。私はそれがあらかじめ決められているので、それが正の浮動小数点、肯定的なものか否定的なものなのか、それともそれ以外のものなのかには関心がありません。

これは、ウェブサイトが既に構築している予め設定された数の<select>タグを持っていることです。すべての選択タグをループして、現在選択されているオプションを取得し、その中で一致する数字を[]にする必要があります。

<select> 
    <option>Stuff [193.33]</option> 
    <option>Stuff2 [19232l.39393]</option> 
</select> 

のような何か...

$('#content_area').$('input:select').change(function(){ 
    $('#content_area').$('select option:selected').each(function(){} 

私は理由として気付いていないよ、

  1. 式は私がちょうど警告でそれを返しても、構文エラーを与え、
  2. どのようにループを構築しますか?
+1

あなたは ''に文字 'L'を持つことを意味していましたか?あなたの正規表現がどの文字とも一致しないので、私は尋ねます。 –

答えて

-1

は、あなたの正規表現の

http://www.regextester.com/

+0

これはコメントであり、回答ではありません。 – Phrogz

+0

これは実際にはコメントであり、答えではありません。あなたは本当に彼の質問に答えないで、ツールを提供しているだけです。 – treeface

2

あなたのjQueryのコードは完全に間違っているテストするために、ここで素晴らしいツールがあります。

おそらくJavascriptが後読みをサポートしていませんthis articleによると

$('#content_area select').change(function() { 
    var value = $(this).val(); 
}); 
0

を書くしようとしています。この表現はあなたのために働くでしょうか?

(?:\[)([0-9]+(?:\.[0-9]*)?)(?:\]) 

EDIT:より簡潔または、\[(\d+(?:\.\d*)?)\](これを指摘しPhrogzのおかげで)

EDIT2:多分このような何かがうまくいく、jQueryのビットに対処するために(jQueryの:selectedドキュメントから持ち上げ):

$("select").change(function() { 
    $("select option:selected").each(function() { 
     var value = $(this).text(); 
     // Do regex magic 
    }); 
}); 
+0

非キャプチャグループを持つ正規表現で '(?:\\ [)'は単に\\ ['と同じです。また、元の文字通りの期間を逃れることを忘れてしまった。 – Phrogz

+0

途中に番号を取得するためのキャプチャグループがあります。私は '(?:\\ [)'を '\\ ['に置き換えようとしましたが、正しく一致していないようです。私は正規表現の達人ではないので、私は何かばかげたことをしている可能性があります。リテラルのように '.'非エスケープ:) –

+0

@Phrogz:いいえ、私は訂正します。それが正しいかどうかを確認するときに動作します:) –

0

a)これはオプションの値として設定する必要があります。あなたがHTMLを変更できない場合

<select> 
    <option value="193.33">Stuff [193.33]</option> 
    <option value="19232l.39393">Stuff2 [19232l.39393]</option> 
</select> 

b)は、その後、あなたがしたい正規表現は次のとおりです。

/\[\d+(\.\d+)?\]/ 

あなたは実際、ほとんどのJSを含め、いくつかの理由のためにあなたが持っているものを使用することはできませんインタプリタは、正のlookbehindアサーションをサポートしていません。このため、我々はそうのように、それらを角括弧をキャプチャして、無視する必要があります:

$('foo option:selected').each(function(){ 
    var float = /\[(\d+(\.\d+)?)\]/.exec(this.value)[1] * 1; 
}); 
+1

@AnonymousDownvoterなぜ私の答えが '1'のランキングに値しないと感じたのか説明していただければ幸いです。 Drive-by downvoting _can_ヘルプは大きな回答プールを明確にしますが、他の人にこの答えを明らかにすべき理由を伝えるコメントを残す方がはるかに優れています。 – Phrogz