JavaScript로 끝남

JavaScript에서 문자열이 특정 문자로 끝나는지 확인하려면 어떻게 해야 합니까?

예:나는 끈이 있다

var str = "mystring#"; 

그 문자열이 다음 문자열로 끝나는지 알고 싶다.#어떻게 확인할 수 있나요?

  1. 이 있나요?endsWith()메서드는 JavaScript에 있습니까?

  2. 제가 가지고 있는 해결책 중 하나는 문자열의 길이를 가져다가 마지막 문자를 받아서 확인하는 것입니다.

이게 최선인가요 아니면 다른 방법이 있나요?



질문에 대한 답변



업데이트 (2015년 11월 24일) :

이 답변은 원래 2010년(6년 전)에 게시되었으므로 다음과 같은 통찰력 있는 의견을 참고하십시오.

구글 업데이트 – ECMA6에 이 기능이 추가된 것 같습니다.MDN 문서에는 폴리필도 기재되어 있습니다.https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith

  • T.J. 크로더-

서브스트링을 만드는 것은 현대의 브라우저에서 비싸지 않다.이 답변이 게시된 것은 2010년이었을지도 모른다.요즘 심플한 게this.substr(-suffix.length) === suffix 접근법은 Chrome에서 가장 빠르고, IE11에서 indexOf와 같으며, Firefox에서는 4%(fergetabout territory)만 느립니다.https://jsben.ch/OJzlM 및 결과가 잘못된 경우: jsperf.com/endswith-stackoverflow-when-falseOf course, ES6 adding ends With, 포인트는 moot. : – ).


원래 답변:

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) 

모든 브라우저에서 동작하며 monkey 패치가 필요하지 않습니다.String문자열 전체를 스캔할 필요가 없습니다.lastIndexOf일치하는 것이 없을 때 사용합니다.

다음과 같은 정규 표현 특수 문자를 포함할 수 있는 상수 문자열을 일치시키는 경우'$'다음 항목을 사용할 수 있습니다.

function makeSuffixRegExp(suffix, caseInsensitive) {
return new RegExp(
String(suffix).replace(/[$%()*+.?[\]{ }]/g, "\$&") + "$",
caseInsensitive ? "i" : ""); } 

이렇게 쓸 수 있어요.

makeSuffixRegExp("a[complicated]*suffix*").test(str) 



  1. 아쉽게도 아닙니다.
  2. if( "mystring#".substr(-1) === "#" ) {}



어서, 이게 맞잖아endsWith구현:

String.prototype.endsWith = function (s) {
return this.length >= s.length && this.substr(this.length - s.length) == s; } 

사용.lastIndexOf일치하지 않을 경우 불필요한 CPU 루프가 생성됩니다.




이 버전에서는 하위 문자열이 생성되지 않으며 정규 표현식을 사용하지 않습니다(여기에 있는 일부 regex 응답은 작동하지만 다른 응답은 중단됨).

String.prototype.endsWith = function(str) {
var lastIndex = this.lastIndexOf(str);
return (lastIndex !== -1) && (lastIndex + str.length === this.length); } 

퍼포먼스가 중요한 경우 테스트해 볼 가치가 있습니다.lastIndexOf실제로 서브스트링을 작성하거나 작성하지 않는 것보다 빠릅니다.(사용하는 JS엔진에 따라 다를 수 있습니다.)일치하는 경우 더 빠를 수 있습니다.스트링이 작을 경우 스트링이 클 때는 별로 신경 쓰지 않아도 전체를 돌아볼 필요가 있습니다.

단일 문자 확인, 길이 찾기 및 사용charAt아마 가장 좋은 방법일 거예요.