我有一个我正在骑行的阵列。对于数组中的每个值,我正在分析它,然后根据它遇到的条件将值分流到另一个数组中。但是,出于这个问题的目的,我只是想计算当前数组项中有多少个句点。
以下是我尝试使用的代码的相关部分:
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,因此框总是弹出。
有更好的方法来计算每个数组值中的点吗?
答案 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;
}
}