匹配返回100而不是实际值

时间:2016-01-04 20:08:14

标签: javascript arrays match

我有一个我正在骑行的阵列。对于数组中的每个值,我正在分析它,然后根据它遇到的条件将值分流到另一个数组中。但是,出于这个问题的目的,我只是想计算当前数组项中有多少个句点。

以下是我尝试使用的代码的相关部分:

for(i = 0; i < (sortarray.length) -1; i++)
 {
  var count = (sortarray[i].match(/./g)||[]).length;
  console.log(count + ' periods found in name' + sortarray[i]);
  if (count > 1)
  {
   alert('Error: One or more filenames contain periods.');
   return;
  }
  else ...

大多数值都是文件名,并且只有一个句点,而文件夹名称则没有句点。任何超过1个周期的东西都会弹出一个警告框。看起来很简单,但由于某种原因,我的变量保持返回100而不是1,因此框总是弹出。

有更好的方法来计算每个数组值中的点吗?

2 个答案:

答案 0 :(得分:2)

问题在于你的正则表达式。点(。)表示任何字符。此外(因为您使用g选项)您的正则表达式将匹配整个字符串。

这就是为什么你得到100: length正在调整你的完整字符串

因此,您应该转义点,以便它真正寻找点而不是任何字符。

sortarray[i].match(/\./g)

答案 1 :(得分:1)

您可以只比较.的第一个索引和.的最后一个索引,而不是那个逻辑,如果它们不相等则意味着文件名有多个.

for(i = 0; i < (sortarray.length) -1; i++)
 {
  if (sortarray[i].indexOf(".")!=sortarray[i].lastIndexOf("."))
  {
   alert('Error: One or more filenames contain periods.');
   return;
  }
}