2014-02-17 2 views
0

Предположим, эту функцию:Тест LastIndex двух строки

function renameDoc() { 
    var newFilename = prompt("Name this document:", filename); 
    if (newFilename !== null) { 
     if (newFilename === "") { 
     changeFilename(); // "untitled.txt" 
     } else { 
     changeFilename(newFilename.lastIndexOf(".txt") == -1 ? 
      newFilename + ".txt" : newFilename); 
     } 
     return true; 
    } 
    } 

Эта функция тесты, если newFilename имеет .txt на последней. и это работает отлично.

Но хочу, чтобы проверить, если newFilename имеет .txt. или .md

Я пытаюсь это

function renameDoc() { 
    var newFilename = prompt("Name this document:", filename); 
    if (newFilename !== null) { 
     if (newFilename === "") { 
     changeFilename(); // "untitled.txt" 
     } else { 
     changeFilename((newFilename.lastIndexOf(".txt") && newFilename.lastIndexOf(".md")) == -1 ? 
      newFilename + ".txt" : newFilename); 
     } 
     return true; 
    } 
    } 

Это, кажется, не работает отлично.

Можете ли вы мне помочь?

+0

Вы можете использовать условие '||' вместо этого. – Navin

+1

И НЕ ИЛИ. Если последний индекс равен -1, это означает, что строка не указана в тексте. Проверка того, что оба значения равны -1, означает, что файл не заканчивается на .txt или с .md, поэтому рекомендуется добавить .txt к этим файлам. Использование условия ИЛИ не дает полезной информации, поскольку возвращает FALSE только тогда, когда файл заканчивается как .txt, так и .md, что невозможно. –

+1

@ La-comadreja вы правы. я скучал. – Navin

ответ

2

Вы можете использовать это:

/\.(md|txt)$/.test(newFilename) 

проверить, если имя файла заканчивается либо «.md» или «.txt»

В вашей функции вы можете сделать это:

changeFilename(
    /\.(md|txt)$/.test(newFilename) 
     ? newFilename 
     : newFilename + ".txt" 
); 
+0

Mine ближе к тому, что было изначально реализовано и проще в синтаксисе. –

+1

@ user3317779 если вы хотите улучшить производительность, тогда перейдите к решению La-comadreja, и если вы хотите получить небольшой код, то перейдите к этому коду. –

+0

@ La-comadreja yea вы использовали 'lastIndexOf', но теперь я думаю, какой из них я должен использовать. – user3317779

2
(newFilename.lastIndexOf(".txt") === -1 && newFilename.lastIndexOf(".md") === -1) 

заявление проверяет, что у него нет .txt и НЕ имеет .md. Например, он возвращает истину, если она заканчивается в .jpeg

+0

Это кажется длинным ... Любое более простое/маленькое решение? – user3317779

+0

Если вы тестируете 2 переменные для равенства с определенным целым числом, вам нужно выполнить сравнение «равно» для обеих переменных. Не может быть сокращено, потому что это двоичный оператор. –

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