需要匹配sting或从字符串中删除不需要的字符

时间:2010-12-11 14:39:38

标签: javascript jquery regex

我有以下变量,它是选择框的选定文本。这是选择框标记。

<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

无法搞清楚正则表达式。

2 个答案:

答案 0 :(得分:2)

这应该这样做(呃,实际上,请参阅下面的更新):

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

Live example

说的是“寻找$后跟一系列数字和.个字符,并在匹配时尽可能多地抓取该系列。”生成的匹配数组将具有完整匹配字符串(包括位置0中的$,然后是位置1处的第一个(也是唯一的)捕获组 - 因此我们抓住它。 / p>


更新呃,呃,如果你需要捕获-标志(我猜你这么做了),请改为:

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

Live example

如果-出现在$之前,则使用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);

它会在$上拆分,然后删除最后一个字符]