使用javascript中的正则表达式从字符串中过滤掉一个百分比

时间:2012-08-16 15:51:12

标签: javascript regex

我有以下字符串值:£-155(-2.2%)

除此之外,我希望能够提取任何数字,可能/可能不包含' - '减号。所以上面会是:-2.2

我还需要知道该值是否具有上述形式的百分比......最终代码中将使用条件语句。

想法?

3 个答案:

答案 0 :(得分:0)

为什么使用正则表达式这么简单?为什么不抓住字符串中的最后一个字符并检查它是数字还是%。

同样,如果要删除它,只需使用.substr()方法从字符串中删除最后一个字符:

http://www.w3schools.com/jsref/jsref_substr.asp

答案 1 :(得分:0)

您基本上想要一个匹配数字的正则表达式,该数字已经answered many times before

然后,只要添加一个可选的百分号(%?),就可以检查它是否存在于匹配的字符串中。

答案 2 :(得分:0)

// An optional sign and either an integer followed by an optional fraction
// or a decimal fraction.
var numberRe = '[+-]?(?:[0-9]+(?:[.][0-9]*)?|[.][0-9]+)';

// Matches a number (in group 1)
// and an optional percentage in parentheses (in group 2).
var quantity = new RegExp(
    '(' + numberRe + ')(?:\\s*[(]\\s*(' + numberRe + ')\\s*%\\s*[)])?'); 

如果您与quantity匹配,则应获取第1组中的数字和第2组中的任何百分比。

JSON.stringify(quantity.exec('£-155 (-2.2%)'))
["-155 (-2.2%)", "-155", "-2.2"]

要将其作为数字,请使用

中的parseFloat或一元+
var match = quantity.exec('£-155 (-2.2%)');
var n = +match[1], pct = match[2] != null ? +match[2] / 100 : NaN;
alert('n = ' + n + ', whole = ' + (pct ? n / pct : "unknown"));