【问题标题】:Javascript Regex giving NaN from stringJavascript Regex 从字符串中给出 NaN
【发布时间】:2018-06-19 04:34:41
【问题描述】:

我试图只从字符串的开头获取数字。

我有以下代码从字符串中获取数字和文本。

var unitData = '(135 g)'  // it may be 0.135 or .135
var unitValue = Number(unitData.match(/.?\d+\.?\d*/).toString());
var unitName = unitData.match(/[A-Za-z]+/g) || '';

console.log(unitValue);
console.log(unitName);

它为unitValue 提供NaN。如果数字在字符串的第一个位置,它工作正常。

【问题讨论】:

  • 你为什么不检查你的unitData.match(/.?\d+\.?\d*/)返回什么?
  • (135 不是数字,所以它是正确的行为

标签: javascript regex match


【解决方案1】:

在你的正则表达式中也选择了括号是一个小错误。

它基本上是返回这个:

'(135

我已经更新了正则表达式。请在下面尝试:

var unitData = '(135 g)'
var unitValue = Number(unitData.match(/\d*\.?\d+/)[0]);
console.log(unitValue);
unitData = '(.135 g)'
unitValue = Number(unitData.match(/\d*\.?\d+/)[0]);
 console.log(unitValue);
unitData = '(135.42 g)'
unitValue = Number(unitData.match(/\d*\.?\d+/)[0]);
unitName = unitData.match(/[A-Za-z]+/g) || '';

console.log(unitValue);
console.log(unitName);

希望这会有所帮助:)

【讨论】:

  • toString() 在数组上调用仍然没有什么意义。
  • 现在Number 应用于数组没有意义
  • 十进制 ".135" 值为 135
  • @zerkms 是的,如果它始终是括号后的数字,那么它会起作用。
  • @zerkms 我已经更新了我的 asnwer 来处理十进制场景和普通数字场景
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-10
  • 2018-05-19
  • 2013-07-12
  • 2014-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多