JavaScript에서 문자열이 특정 문자로 끝나는 지 어떻게 확인할 수 있습니까?
예 : 문자열이 있습니다
var str = "mystring#";
해당 문자열이로 끝나는 지 알고 싶습니다 #
. 어떻게 확인할 수 있습니까?
-
거기에
endsWith()
자바 스크립트의 방법은? -
내가 가지고있는 한 가지 해결책은 문자열의 길이를 가져 와서 마지막 문자를 가져 와서 확인하는 것입니다.
이것이 가장 좋은 방법입니까 아니면 다른 방법이 있습니까?
답변
업데이트 (2015 년 11 월 24 일) :
이 답변은 원래 2010 년 (6 년 전)에 게시되었으므로 다음과 같은 통찰력있는 의견에 유의하십시오.
-
Shauna -Google 직원을위한 업데이트-ECMA6에이 기능이 추가 된 것 같습니다. MDN 아티클은 또한 폴리 필을 보여줍니다. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith
-
TJ Crowder- 하위 문자열을 만드는 것은 최신 브라우저에서 비싸지 않습니다. 이 답변이 게시 된 것은 2010 년이었던 것 같습니다. 요즘, 간단한
this.substr(-suffix.length) === suffix
방법은 빠른 크롬, 같이 IndexOf와 같은 IE11에서 동일한에서, 그리고 4 % 느린 파이어 폭스에 (fergetaboutit 영토) : jsperf.com/endswith-stackoverflow/14 빠른 전반적으로 그리고 결과가 거짓 인 경우 : jsperf.com/endswith-stackoverflow-when-false 물론 ES6에 endsWith를 추가하면 요점은 불분명 합니다. 🙂
원래 답변 :
나는 이것이 1 년 된 질문이라는 것을 알고 있지만 이것도 필요하며 크로스 브라우저를 작동시켜야합니다. 모든 사람의 답변과 의견을 결합 하고 약간 단순화합니다.
String.prototype.endsWith = function(suffix) {
return this.indexOf(suffix, this.length - suffix.length) !== -1;
};
- 부분 문자열을 만들지 않습니다
indexOf
빠른 결과를 위해 고유 기능 사용indexOf
앞의 건너 뛰기 의 두 번째 매개 변수를 사용하여 불필요한 비교 를 건너 뜁니다.- Internet Explorer에서 작동
- 정규식 합병증 없음
또한 기본 데이터 구조의 프로토 타입에서 물건을 채우고 싶지 않은 경우 독립형 버전이 있습니다.
function endsWith(str, suffix) {
return str.indexOf(suffix, str.length - suffix.length) !== -1;
}
편집 : 의견에서 @hamish가 지적했듯이 안전한면에서 오류를 일으키고 구현이 이미 제공 typeof
되었는지 확인하려면 다음과 같이 확인을 추가하면됩니다 .
if (typeof String.prototype.endsWith !== 'function') {
String.prototype.endsWith = function(suffix) {
return this.indexOf(suffix, this.length - suffix.length) !== -1;
};
}
답변
/#$/.test(str)
모든 브라우저에서 작동하며 원숭이 패치 String
가 필요 lastIndexOf
하지 않으며 일치하는 항목이 없을 때 와 마찬가지로 전체 문자열을 스캔하지 않아도 됩니다.
과 같은 정규 표현식 특수 문자를 포함 할 수있는 상수 문자열을 일치 시키려면 '$'
다음을 사용할 수 있습니다.
function makeSuffixRegExp(suffix, caseInsensitive) {
return new RegExp(
String(suffix).replace(/[$%()*+.?\[\\\]{|}]/g, "\\$&") + "$",
caseInsensitive ? "i" : "");
}
다음과 같이 사용할 수 있습니다
makeSuffixRegExp("a[complicated]*suffix*").test(str)
답변
- 불행히도.
if( "mystring#".substr(-1) === "#" ) {}
답변
자, 이것이 올바른 endsWith
구현입니다.
String.prototype.endsWith = function (s) {
return this.length >= s.length && this.substr(this.length - s.length) == s;
}
사용하여 lastIndexOf
일치가없는 경우는 단지 불필요한 CPU 루프를 만듭니다.
답변
이 버전에서는 하위 문자열을 만들지 않으며 정규 표현식을 사용하지 않습니다 (일부 정규식 답변은 작동하지만 다른 정규 표현식은 손상됨).
String.prototype.endsWith = function(str)
{
var lastIndex = this.lastIndexOf(str);
return (lastIndex !== -1) && (lastIndex + str.length === this.length);
}
성능이 중요하다면 lastIndexOf
실제로 부분 문자열을 만드는 것보다 빠른지 테스트하는 것이 좋습니다. (사용중인 JS 엔진에 따라 다를 수 있습니다 …) 일치하는 경우와 문자열이 작을 때 더 빠를 수 있습니다. 우리는 정말로 신경 쓰지 않지만 🙁
단일 문자를 확인하려면 길이를 찾은 다음 사용 charAt
하는 것이 가장 좋습니다.
답변
slice
방법이있는 apporach를 보지 못했습니다 . 그래서 나는 그것을 여기에 남겨 둡니다.
function endsWith(str, suffix) {
return str.slice(-suffix.length) === suffix
}
답변
return this.lastIndexOf(str) + str.length == this.length;
원래 문자열 길이가 검색 문자열 길이보다 하나이고 검색 문자열을 찾을 수없는 경우 작동하지 않습니다.
lastIndexOf는 -1을 반환하고 검색 문자열 길이를 추가하면 원래 문자열 길이가 남습니다.
가능한 수정은
return this.length >= str.length && this.lastIndexOf(str) + str.length == this.length