如何从数字+;使用JavaScript的度量单位字符串?

如何从数字+;使用JavaScript的度量单位字符串?,javascript,string,Javascript,String,如果我有这根绳子 str = "22px"; 如何提取数字22?谢谢。你可以试试str.match(/\d+/) 试试这个 parseInt("22px"); 但这只适用于数字始终为2位的情况。我认为您可以直接使用str.substring(0,2)如果您想要一个实际的数字,您应该尝试parseInt()。它将负责为您取下“px” str = "22px"; num = parseInt(str, 10); // pass in the radix for safety :) asser

如果我有这根绳子

str = "22px";
如何提取数字22?谢谢。

你可以试试str.match(/\d+/)

试试这个

parseInt("22px");

但这只适用于数字始终为2位的情况。

我认为您可以直接使用
str.substring(0,2)
如果您想要一个实际的数字,您应该尝试parseInt()。它将负责为您取下“px”

str = "22px";

num = parseInt(str, 10); // pass in the radix for safety :)

assert(num === 22);

这里有一个正则表达式,它将值从单位中拆分。它也适用于负值和十进制数:

str.match(/(-?[\d.]+)([a-z%]*)/)
Regex解释说:

  • (?[\d.]+)
    。。抓取一个可选的“-”,后跟数字或点
  • ([a-z%]*)
    。。查找直接跟在数字后面的所有字母或%符号
下面是一个返回特定部分的示例函数:

函数parseVal(str){
res=str.match(/(?[\d.]+)([a-z%]*)/);
返回{
val:parseFloat(res[1]),
单位:res[2]
}
}
parseVal('12px')/{val:12,单位:'px'}
parseVal('-20.5%')/{val:-20.5,单位:''}
parseVal('22.75em')/{val:22.75,单位:'em'}
parseVal('1234')/{val:1234,单位:''}
parseVal('margin top:-50px;')/{val:-50,单位:'px'}
上面的最后一个示例显示了正则表达式的“智能”程度:它忽略开头的所有非数值和结尾的多余字符,即
边距顶部:
被剥离

注意

正则表达式非常简单。当它接收到无效值时,将返回意外结果:

parseVal(“…”)/{val:NaN,单位:'}
parseVal(“2.3.4.5pxpx”)/{val:2.3,单位:“px”}
parseVal(“dummy”)//类型错误!

你能说更多你想要的吗?要查找第一个非数字字符之前的所有数字吗?还是你想在“px”之前找到所有东西?或者别的什么?一个比我更好的解决方案。。。如果我对我的reg表达式感兴趣,我会建议这条路线……谢谢,哪里是学习javascript的reg表达式的最好地方?一个相当不错的网站是regular-expressions.info。它还有一个javascript正则表达式测试程序。这是最干净、最快的解决方案。如果处理浮点值,如
12.5em
,则使用
parseFloat(str)
。注:此解决方案也适用于负值,如
-22px
(如“页边距顶部:-22px”)
str.match(/(-?[\d.]+)([a-z%]*)/)