我有以下变量,它是选择框的选定文本。这是选择框标记。
<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();
});
所以我想要删除除金额以外的所有字符,同时删除“$”。因此,如果选择“Red [Add $ 1.00]”,我希望test_var等于1.00
无法搞清楚正则表达式。
答案 0 :(得分:2)
这应该这样做(呃,实际上,请参阅下面的更新):
var m = test_var.match(/(-?)\$([0-9\.]+)/);
var result = m.length > 0 ? m[1] : "";
说的是“寻找$
后跟一系列数字和.
个字符,并在匹配时尽可能多地抓取该系列。”生成的匹配数组将具有完整匹配字符串(包括位置0中的$
,然后是位置1处的第一个(也是唯一的)捕获组 - 因此我们抓住它。 / p>
更新呃,呃,如果你需要捕获-
标志(我猜你这么做了),请改为:
var m = test_var.match(/(-?)\$([0-9\.]+)/);
var result = m.length > 0 ? m[1] + m[2] : "";
如果-
出现在$
之前,则使用m[1]
的可选捕获,然后合并两个捕获组(m[2]
和m[1]
; {{1} }如果没有-
,则为“”。
结果(例如):
Red [Add $1.00] => 1.00 Blue [Subtract -$1.00] => -1.00
偏离主题:注意本地化!因为在某些区域设置中,.
的{{1}}将为,
s,例如德国的一欧元为“€1,00”。
答案 1 :(得分: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);
它会在$
上拆分,然后删除最后一个字符]
。