需要匹配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
无法计算出正则表达式来执行此操作。
这应该这样做(呃,其实,见下文更新):
var m = test_var.match(/(-?)\$([0-9\.]+)/);
var result = m.length > 0 ? m[1] : "";
什么,说的是“寻找一个$
随后进行了一系列的数字和.
角色,并在匹配时尽可能多地抓取该系列。“将得到的匹配阵列将具有完整匹配字符串(包括在位置0处的$
,然后将第一个(只)在位置捕获组1 —,所以我们抢。
更新呃,呃,如果你需要捕获-
号(和我猜你这样做),更改此:
var m = test_var.match(/(-?)\$([0-9\.]+)/);
var result = m.length > 0 ? m[1] + m[2] : "";
如果-
出现在$
之前,则使用可选捕获,然后组合两个捕获组(m[1]
和m[2]
; m[1]
将是“”,如果没有-
)。
结果(例如):
Red [Add $1.00] => 1.00 Blue [Subtract -$1.00] => -1.00
题外话:当心本地化!因为在某些地区,那些.
s将是,
s,例如在德国为1欧元的“€ 1,00”。
+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);
它会分裂的$
,然后删除最后一个字符]
。
这将删除可选的'-'(例如,“Blue [Subtract - $ 1.00]”)。不知道@user是否想要它,但我猜他/她会这样做,否则数量有点误导。 :-) – 2010-12-11 14:50:34
@ T.J。 Crowder:很好的一点。可能需要它。我会更新。 – user113716 2010-12-11 14:51:38
“数据量”为+1。尽管文本是相当可分析的,但它仍然是一种更干净的方法和辅助本地化(如果这更适合于语言环境,则可以将“1.00”放在属性中,但显示“1,00”)。 – 2010-12-11 14:53:58
我希望你没有使用test_var来实际计算产品的价格。这可能很容易被滥用。 – 2010-12-11 15:38:45
谢谢,哈哈。不以任何方式与产品的实际价格无关。 – user357034 2010-12-12 03:44:46