2010-12-11 116 views
1

我有以下變量,它是選擇框的選定文本。這是選擇框標記。需要匹配sting或從字符串中刪除不需要的字符

<select name="SELECT___100E___7"> 
<option selected="" value="25">Beige/Almond</option> 
<option value="21">Blue [Subtract -$1.00]</option> 
<option value="27">Chrome [Subtract -$2.00]</option> 
<option value="29">Red [Add $1.00]</option> 
</select> 

可變test_var按住選定的文字...

$('select[name^="SELECT___"]').change(function(){ 
var test_var = $(this).find("option:selected").text(); 
}); 

所以我想要做的就是刪除所有字符,除了量,也消除了「$」。因此,如果選擇「紅色[添加$ 1.00]」,我希望test_var等於1.00

無法計算出正則表達式來執行此操作。

+0

我希望你沒有使用test_var來實際計算產品的價格。這可能很容易被濫用。 – 2010-12-11 15:38:45

+0

謝謝,哈哈。不以任何方式與產品的實際價格無關。 – user357034 2010-12-12 03:44:46

回答

2

這應該這樣做(呃,其實,見下文更新):

var m = test_var.match(/(-?)\$([0-9\.]+)/); 
var result = m.length > 0 ? m[1] : ""; 

Live example

什麼,說的是「尋找一個$隨後進行了一系列的數字和.角色,並在匹配時儘可能多地抓取該系列。「將得到的匹配陣列將具有完整匹配字符串(包括在位置0處的$,然後將第一個(只)在位置捕獲組1   —,所以我們搶。


更新呃,呃,如果你需要捕獲-號(和我猜你這樣做),更改此:

var m = test_var.match(/(-?)\$([0-9\.]+)/); 
    var result = m.length > 0 ? m[1] + m[2] : ""; 

Live example

如果-出現在$之前,則使用可選捕獲,然後組合兩個捕獲組(m[1]m[2]; m[1]將是「」,如果沒有-)。

結果(例如):

Red [Add $1.00]  => 1.00 
Blue [Subtract -$1.00] => -1.00

題外話:當心本地化!因爲在某些地區,那些. s將是, s,例如在德國爲1歐元的「€ 1,00」。

+0

+1,並感謝有關'-'的註釋。 – user113716 2010-12-11 14:56:53

2

也許更清潔的方法是簡單地使用自定義屬性:

<option value="21" data-amount="1.00">Blue [Subtract -$1.00]</option> 

然後使用.attr()

$(this).find("option:selected").attr('data-amount'); 

原來的答覆:作爲@T.J. Crowder指出,這消除了- ,這可能是需要的。如果沒有,這將工作。

雖然你可以使用正則表達式,你不需要。

如果你知道你有文本,它的佈局,你可以做這樣的事情:

var result = test_var.split('$')[1].slice(0,-1); 

它會分裂的$,然後刪除最後一個字符]

+0

這將刪除可選的'-'(例如,「Blue [Subtract - $ 1.00]」)。不知道@user是否想要它,但我猜他/她會這樣做,否則數量有點誤導。 :-) – 2010-12-11 14:50:34

+0

@ T.J。 Crowder:很好的一點。可能需要它。我會更新。 – user113716 2010-12-11 14:51:38

+0

「數據量」爲+1。儘管文本是相當可分析的,但它仍然是一種更乾淨的方法和輔助本地化(如果這更適合於語言環境,則可以將「1.00」放在屬性中,但顯示「1,00」)。 – 2010-12-11 14:53:58

相關問題