Javascript 两个字符串的测试索引

Javascript 两个字符串的测试索引,javascript,string,Javascript,String,假设此功能: function renameDoc() { var newFilename = prompt("Name this document:", filename); if (newFilename !== null) { if (newFilename === "") { changeFilename(); // "untitled.txt" } else { changeFilename(newFilename

假设此功能:

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;
    }
  }
它似乎工作不完美

你能帮我吗

(newFilename.lastIndexOf(".txt") === -1 && newFilename.lastIndexOf(".md") === -1)
该语句正在检查它是否没有.txt和.md。例如,如果以.jpeg结尾,则返回true

该语句正在检查它是否没有.txt和.md。例如,如果以.jpeg结尾,则返回true。您可以使用以下方法:

/\.(md|txt)$/.test(newFilename)
测试文件名是否以“.md”或“.txt”结尾

在您的功能中,您可以执行以下操作:

changeFilename(
    /\.(md|txt)$/.test(newFilename)
        ? newFilename
        : newFilename + ".txt"
);
你可以使用这个:

/\.(md|txt)$/.test(newFilename)
测试文件名是否以“.md”或“.txt”结尾

在您的功能中,您可以执行以下操作:

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


您可以使用
|
条件代替。而不是或。如果最后一个索引为-1,则表示该字符串不在文本中。检查两者是否都等于-1意味着文件不以.txt或.md结尾,因此可以将.txt附加到这些文件中。使用OR条件不会产生有用的信息,因为它仅在文件以.txt和.md结尾时返回FALSE,这是不可能的。@La comadreja您是对的。我错过了。您可以使用
|
条件代替。而不是或。如果最后一个索引为-1,则表示该字符串不在文本中。检查两者是否都等于-1意味着文件不以.txt或.md结尾,因此可以将.txt附加到这些文件中。使用OR条件不会产生有用的信息,因为它仅在文件以.txt和.md结尾时返回FALSE,这是不可能的。@La comadreja您是对的。我错过了。这似乎太长了。。。有更简单/小的解决方案吗?如果您测试两个变量是否等于某个整数,则需要对两个变量执行“等于”比较。不能缩短,因为它是一个二进制运算符。这似乎很长。。。有更简单/小的解决方案吗?如果您测试两个变量是否等于某个整数,则需要对两个变量执行“等于”比较。不能缩短,因为它是一个二进制运算符。我的运算符与最初实现的运算符更接近,语法也更简单。@user3317779如果您想要更好的性能,请使用La comadreja的解决方案,如果您想要小代码,请使用此代码。@La comadreja yea您使用了
lastIndexOf
,但现在我正在考虑应该使用哪一个运算符使用。如果您有很多文件名,那么通过使用
|
符号将它们分隔开来,就可以很容易地将它们添加到我的解决方案中。对于两个文件名,我们的解决方案没有区别。另外,您可以通过将我的解决方案更改为
…)$/i.test来执行不区分大小写的测试(…
。添加
i
标志将匹配并接受相同的.TXT或.TXT。由于正则表达式的多功能性,它们确实会使代码更难阅读。尽管如此,这看起来合理且简洁。我的标志更接近最初实现的内容,语法也更简单。@user3317779如果您想要更好的性能,请使用它La comadreja的解决方案,如果您想要小代码,请使用此代码。@La comadreja是的,您使用了
lastIndexOf
,但现在我在考虑应该使用哪一个。如果您有很多文件名,那么可以通过用
符号分隔它们来轻松地将它们添加到我的解决方案中。对于两个文件名,我们的解决方案。此外,您可以通过将我的解决方案更改为
..)$/i.test(…
)来执行不区分大小写的测试。添加
i
标志将匹配并接受相同的.TXT或.TXT。尽管正则表达式用途广泛,但它们确实会使代码更难阅读。这看起来合理且简洁。