如何从带正则表达式的字符串中获取百分比值?

时间:2013-10-01 17:57:32

标签: javascript regex mongodb

如何从此字符串中获取百分比值但没有百分号?

我有这个字符串,我想在没有百分号的情况下获得%s。除了百分号出现之外,我大部分都在工作:

"asfd %1.3344 %1.2323 % asdf %".match(/%[0-9.]*/g)

结果:["%1.3344", "%1.2323", "%", "%" ]

我希望结果是[1.3344,1.2323]

我尝试使用正则表达式向前看,但我得到[“”,“”,“”,“”]。这是我的尝试:

"asfd %1.3344 %1.2323 % asdf %".match(/(?=%)[0-9.]*/g)

结果:["", "", "", "" ]

5 个答案:

答案 0 :(得分:0)

这里通常的解决方案是将您想要的内容放在一个组中并在循环中使用exec

var re = /%(\d+(?:\.\d*)?)/g;
var percentages = [];
var m;

while(m = re.exec(str)) {
    percentages.push(+m[1]);
}

请注意限制性更强的正则表达式:至少一位数字,后跟可选的小数点分隔符,后跟任意位数。

答案 1 :(得分:0)

"asfd %1.3344 %1.2323 % asdf %".match(/%[0-9.]+/g).map( function (item) { return item.substr(1); })

答案 2 :(得分:0)

我相信这也应该有用。

JavaScript的:

var str = "asfd %1.3344 %1.2323 % asdf %",
    arr = [];

str.replace(/%(\d+(?:\.\d*)?)/g, function (a, b) {
    arr.push(b);
});

console.log(arr);

jsFiddle

答案 3 :(得分:0)

嘿我也检查过并找到了这个解决方案:

var str="asfd %1.3344 %1.2323 % asdf %";
var patt=/%([0-9\.]+)/g;
var result;
while(null != (result = patt.exec(str))){
    document.write(result[1] + '<br />');
} 

答案 4 :(得分:0)

以下正则表达式接缝在这种情况下可以很好地工作而没有循环。

var str = "asfd %1.3344 %1.2323 % asdf %", resultsArray;
resultsArray = str.replace(/(^[^%]+)|[^\d .]|( (?!%\d))/g,'').split(' ');

Split String的方法将返回一个数组

如果您的输入中可能遇到其他类型的模式(例如,如果2个点可以一个接一个地出现“asfd%1 ..%1.23”或其他),请告诉我,以便我们可以修改正则表达式相应