我如何检查字符串是否以多个字符中的任何一个结尾?目前,此代码返回false,即使字符串以问号结尾。如果字符串以句点,感叹号或问号结束,则正常工作的代码将返回true,如果其最后一个字符是其他任何字符,则返回false。
显然我可以独立检查这些条件但是假设我有一个很长的清单,肯定有更好的方法吗?
function myFunction() {
var str = "Hello?";
var n = str.endsWith(".", "!", "?");
document.getElementById("demo").innerHTML = n;
}

<button onclick="myFunction()">Try it</button>
<p id="demo"></p>
&#13;
答案 0 :(得分:13)
endsWith
只是不需要多个字符串来测试。您可以定义它们的数组,并使用endsWith
检查每个值:
function endsWithAny(suffixes, string) {
return suffixes.some(function (suffix) {
return string.endsWith(suffix);
});
}
function myFunction() {
var str = "Hello?";
var n = endsWithAny([".", "!", "?"], str);
document.getElementById("demo").innerHTML = n;
}
或者使用正则表达式进行一次性使用:
var n = /[.!?]$/.test(str);
答案 1 :(得分:1)
由于某种原因,被接受的答案的功能给我带来了问题,因此我编写了适用于我的此功能:
//check if string ends with any of array suffixes
function endsWithAny(suffixes, string) {
for (let suffix of suffixes) {
if(string.endsWith(suffix))
return true;
}
return false;
}
所以您的功能就是
function myFunction() {
var str = "Hello?";
var n = endsWithAny([".", "!", "?"], str);
document.getElementById("demo").innerHTML = n;
}
答案 2 :(得分:1)
您可以将indexOf
与slice
结合使用:
function myFunction() {
var str = "Hello?";
var n = '.!?'.indexOf(str.slice(-1)) >= 0;
document.getElementById("demo").innerHTML = n;
}
<button onclick="myFunction()">Try it</button>
<p id="demo"></p>