另一个正则表达式问题:我正在研究javascript代码,我需要在连字符之间提取float或int数字。像这样:
var string="someText-180.5-200.70-someOtherText";
我需要得到:
var number1="180.5";
var number2="200.70";
有什么建议吗? (我对regex..grrr并不擅长)
谢谢!
答案 0 :(得分:1)
当其他基于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
首先使用它们:)
答案 1 :(得分:1)
其中一个问题是,正则表达式匹配:“-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- ......
但是找到' - '字符之间的所有正浮点数或整数 我希望这能帮到你。
答案 2 :(得分:1)
您可以使用以下正则表达式来完成您要找的内容:
[0-9]*\.?,?[0-9]+
答案 3 :(得分:0)
您可以使用此正则表达式:
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
答案 4 :(得分:0)
var numbers = string.match(/[\d.]+/g)
或者,如果您担心多个句点会产生无效的数字:
var numbers = string.match(/\d+(\.\d+)?/g)