删除所有£符号前的字符并删除最后一个字符]。

5
我有以下选项文本,我想把它放入一个变量中,然后删除除£后面的值以外的所有字符,再将其转换为数字。在这种情况下是28.00。
<option value="294">Set of 2 Boots</option><option value="295">Set of 4 Boots[Add £28.00]</option>

这将正确转换所选选项的文本。
recal_var = jQuery('select').find('option:selected').text();

但是这似乎不适用于英镑符号。如果我把所有东西都改成美元符号,就没有问题了。

price_result = parseFloat(recal_var.split('[Add £')[1].slice(0,-1).replace(/,/g,''));

我也尝试过这些方法,但没有成功。
price_result = parseFloat(recal_var.split('[Add &#163;')[1].slice(0,-1).replace(/,/g,''));

price_result = parseFloat(recal_var.split('[Add &pound;')[1].slice(0,-1).replace(/,/g,''));

我在Firebug中得到的是recal_var.split("[Add \uFFFD")[1]未定义。

页面有这个元标记,不确定是否会有影响。

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

在寻求帮助之前,+1 表示“这是我尝试解决问题的几种方法”。 - Dan Grossman
我对上面的问题进行了一些更新。 - user357034
2个回答

3
var str = "Set of 4 Boots[Add £28.00]";
var costStr = str.match(/£([\d.]+)/);
if(costStr){
    var cost = parseFloat(costStr[1]);
    alert(cost);
}

示例:jsbin 编辑:忽略英镑符号并依赖于最后的位置:
var str = "Set of 4 Boots[Add £28.00]";
var costStr = str.match(/([\d.]+)\]$/);
if(costStr){
    var cost = parseFloat(costStr[1]);
    alert(cost);
}

匹配逗号

var str = "Set of 4 Boots[Add £28,133.00]";
var costStr = str.match(/([\d.,]+)\]$/);
if(costStr){
    var cost = parseFloat(costStr[1].replace(/,/g,""));
    alert(cost);
}

虽然我同意在你的示例中它按预期工作,但是在我的示例中却不行。当我检查变量console.log(recal_var)时,它显示4双靴子[添加£28.00]的集合,但如果我插入var costStr = recal_var.match(/ £([\d.]+)/);,我就不会得到警报。 - user357034
制作一个带有问题的示例页面。 - epascarello
1
你也可以将正则表达式更改为/([\d.]+)\]$/ - epascarello
好的,你的第二段代码可以工作。你能解释一下正则表达式吗?它适用于不同大小的数字吗,比如2,800.00、28,000.00等等... - user357034
1
它表示捕获出现在 "]" 和行末 "$" 之前的任何数字\d或小数点/句号。它会因为逗号不在正则表达式中而失败您的例子。它只会匹配 800.00000.00。要匹配逗号,它必须包含在 [\d.,] 内。但是这样,逗号将无法与 parseFloat 匹配。 - epascarello
工作得非常完美。感谢您的所有帮助和解释。 - user357034

0
这可能是字符集不匹配吗?meta标签显示的是UTF-8,但页面使用的Content-Type是什么?

不确定,我该如何找到答案? - user357034
类似 FiddlerCharles 的工具。 - epascarello
2
你也可以在Firebug中看到HTTP头。 - Ryan Stewart

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接