另一个正则表达式问题:我正在编写 javascript 代码,我需要在连字符之间提取浮点数或整数。像这样:
var string="someText-180.5-200.70-someOtherText";
我需要得到:
var number1="180.5";
var number2="200.70";
有什么建议吗?(我一点都不擅长正则表达式..grrr)
谢谢!
另一个正则表达式问题:我正在编写 javascript 代码,我需要在连字符之间提取浮点数或整数。像这样:
var string="someText-180.5-200.70-someOtherText";
我需要得到:
var number1="180.5";
var number2="200.70";
有什么建议吗?(我一点都不擅长正则表达式..grrr)
谢谢!
一个问题是,一个正则表达式匹配这个: "-180.5-" ,下一个匹配将在 "200.70-someOtherText" 字符串中搜索,所以,当下一次搜索运行不会匹配 200.70 ...我们应该做一点不仅仅是写一个正则表达式。
在我的灵魂中,我剪切了字符串的检查部分,并在字符串的另一部分再次运行正则表达式......并在匹配时执行。
见下面的代码:
function findAllINeed(str){
result = [];
while ((match = /(?:\-)(([0-9]+)\.?([0-9]*))(?:\-)/.exec(str)) != null) {
str = str.substr(match.index + match[1].length)
result.push(parseFloat(match[1]));
}
return result;
}
我试过这个:
findAllINeed("someText-180.5-200.70-someOtherText sd sdf -6 -6.777 7- s 4.55 -4-sdfsdfsdf -45.77-4-")
[180.5, 200.7, 4, 45.77, 4]
不匹配 -6, -6.7777, 4.55, 7- ...
但是找到'-'字符之间的所有正浮点数或整数我希望这对你有所帮助。
虽然其他基于 RegExp 的解决方案有效,但我将提出一个不使用正则表达式的解决方案。我这样做的动机是正则表达式有时难以阅读、修改和/或调试。
此代码返回一个包含字符串中所有浮点数的数组(假设浮点数为正)
"someText-180.5-200.70-someOtherText".split("-"). //splits by hyphens
map(function(elem){
return parseFloat(elem);//convert each part to float
}).filter(function(elem){
return elem===elem;//filter out the not-a-numbers,
// that is, stuff converting to float failed on
});
map/filter
如果您对此更满意,也可以不以“功能性”较低的方式完成此操作。我相信代码的可读性非常重要,您应该对自己的代码感到满意。你可以做
var str = "someText-180.5-200.70-someOtherText";
var splitStr = str.split("-");
var arrayOfFloats = [];
for(var i=0;i<splitStr.length;i++){
var asFloat = parseFloat(splitStr[i]);
if(asFloat===asFloat){ //check for NaN, that is parse float fails
arrayOfFloats.push(asFloat);
}
}
//now arrayOfFloats contains all the floats in your expression
如果您不想匹配第一个和最后一个部分(即,只有严格在连字符之间的浮点数)元素,您可以slice
先匹配它们 :)
您可以使用以下正则表达式来完成您正在寻找的内容:
[0-9]*\.?,?[0-9]+
您可以使用此正则表达式:
var string="someText-180.5-200.70-someOtherText";
var match = string.match(/.*?(\d+(\.\d+)?).*?(\d+(\.\d+)?)/);
console.log(match[1]); // prints 180.5
console.log(match[3]); // prints 200.70
var numbers = string.match(/[\d.]+/g)
或者,如果您担心多个时期会产生无效数字:
var numbers = string.match(/\d+(\.\d+)?/g)