2016-01-04 5 views
0

У меня есть массив, который я проезжаю. Для каждого значения в массиве я анализирую его, а затем отбрасываю значение в другой массив, исходя из того, какие условия он встречает. Однако для целей этого вопроса я просто пытаюсь подсчитать, сколько периодов находится в текущем элементе массива.Соответствие возвращается 100 вместо фактического значения

Вот соответствующая часть кода я пытаюсь использовать:

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 ... 

Большинство значений являются имена файлов и будет иметь один период, в то время как имена папок не будут иметь периоды. Все, что содержит более одного периода, должно вывести окно предупреждения. Кажется довольно простым, но по какой-то причине моя переменная сохраняет 100 вместо 1, и поэтому поле всегда появляется.

Есть ли лучший способ подсчета точек в каждом значении массива?

+4

Вам нужно посчитать реальную точку '\ .'. Простой '.' является зарезервированным оператором. Это означает: любой символ ... – Valijon

ответ

2

Проблемы с вашим регулярное выражение. Точка (.) Означает любой символ. Кроме того (поскольку вы используете опцию g), ваше регулярное выражение будет соответствовать всей строке.

Именно поэтому вы получаете 100: length вызывается на полную строку.

Таким образом, вам следует избегать точки, чтобы она действительно искала точки вместо любого символа.

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

Да, это все, что было. Так просто - спасибо! – Omegacron

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; 
    } 
} 
+0

Это сработает, если мне понадобится только проверка «Да/Нет», но мне действительно нужно количество периодов. – Omegacron

Смежные вопросы