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

问题描述:

我有以下变量,它是选择框的选定文本。这是选择框标记。需要匹配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

这应该这样做(呃,其实,见下文更新):

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

也许更清洁的方法是简单地使用自定义属性:

<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