0

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

我有这个字符串,我想在没有百分号的情况下取出 %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)

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

4

5 回答 5

1
"asfd %1.3344 %1.2323 % asdf %".match(/%[0-9.]+/g).map( function (item) { return item.substr(1); })
于 2013-10-01T18:13:55.640 回答
0

这里通常的解决方案是将你想要的东西放在一个组中并exec循环使用:

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

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

还要注意更严格的正则表达式:至少一个数字,后跟可选的小数分隔符,后跟任意数量的数字。

于 2013-10-01T18:03:20.520 回答
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

于 2013-10-01T18:19:44.993 回答
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 />');
} 
于 2013-10-01T18:38:46.977 回答
0

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

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

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

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

于 2013-10-02T08:40:20.903 回答