[javascript] 문자열이 다른 문자열 “StartsWith”인지 확인하는 방법은 무엇입니까?

String.StartsWithJavaScript에서 C #과 동등한 것을 어떻게 작성 합니까?

var haystack = 'hello world';
var needle = 'he';

haystack.startsWith(needle) == true

참고 : 이것은 오래된 질문이며, ECMAScript 2015 (ES6)는이 .startsWith방법을 도입 한 의견에서 지적한 바와 같습니다 . 그러나이 업데이트 (2015)를 작성할 당시 브라우저 지원은 아직 완료되지 않았습니다 .



답변

ECMAScript 6의 String.prototype.startsWith()방법을 사용할 수 있지만 아직 모든 브라우저에서 지원되는 것은 아닙니다 . shim / polyfill을 사용하여 지원하지 않는 브라우저에 추가 할 수 있습니다. 사양에 제시된 모든 세부 사항 을 준수하는 구현을 만드는 것은 약간 복잡합니다. 충실한 심을 원한다면 다음 중 하나를 사용하십시오.

메소드를 숨기면 (또는 이미있는 브라우저 및 JavaScript 엔진 만 지원하는 경우) 다음과 같이 사용할 수 있습니다.

"Hello World!".startsWith("He"); // true

var haystack = "Hello world";
var prefix = 'orl';
haystack.startsWith(prefix); // false

답변

다른 대안 .lastIndexOf:

haystack.lastIndexOf(needle, 0) === 0

이를 뒤로 보이는 haystack의 발생에 대한 needle인덱스부터 0haystack. 즉,로 haystack시작 하는지 만 확인합니다 needle.

원칙적으로 다른 접근 방식에 비해 성능 이점이 있어야합니다.

  • 전체를 검색하지는 않습니다 haystack.
  • 새로운 임시 문자열을 생성하지 않고 즉시 버립니다.

답변

data.substring(0, input.length) === input

답변

도우미 함수가 없으면 정규식 .test방법을 사용하십시오.

/^He/.test('Hello world')

하드 코드 된 문자열이 아닌 동적 문자열로이를 수행하려면 (문자열에 정규식 제어 문자가 포함되지 않는다고 가정) :

new RegExp('^' + needle).test(haystack)

Javascript에 RegExp.escape 함수가 있습니까?를 확인하십시오 . regexp 제어 문자가 문자열에 나타날 가능성이있는 경우


답변

최고의 솔루션 :

function startsWith(str, word) {
    return str.lastIndexOf(word, 0) === 0;
}

그리고 여기에도 이 있습니다.

function endsWith(str, word) {
    return str.indexOf(word, str.length - word.length) !== -1;
}

String으로 프로토 타입을 선호하는 사람들을 위해 :

String.prototype.startsWith || (String.prototype.startsWith = function(word) {
    return this.lastIndexOf(word, 0) === 0;
});

String.prototype.endsWith   || (String.prototype.endsWith = function(word) {
    return this.indexOf(word, this.length - word.length) !== -1;
});

용법:

"abc".startsWith("ab")
true
"c".ensdWith("c")
true

방법으로 :

startsWith("aaa", "a")
true
startsWith("aaa", "ab")
false
startsWith("abc", "abc")
true
startsWith("abc", "c")
false
startsWith("abc", "a")
true
startsWith("abc", "ba")
false
startsWith("abc", "ab")
true

답변

나는 이것에 대한 나의 의견을 추가하고 싶었다.

우리는 다음과 같이 사용할 수 있다고 생각합니다.

var haystack = 'hello world';
var needle = 'he';

if (haystack.indexOf(needle) == 0) {
  // Code if string starts with this substring
}

답변

CMS 솔루션이 약간 개선되었습니다.

if(!String.prototype.startsWith){
    String.prototype.startsWith = function (str) {
        return !this.indexOf(str);
    }
}

"Hello World!".startsWith("He"); // true

 var data = "Hello world";
 var input = 'He';
 data.startsWith(input); // true

향후 브라우저가 원시 코드로 기능을 구현하거나 다른 라이브러리에 의해 구현되는지 여부에 따라 기능이 이미 존재하는지 확인 예를 들어, 프로토 타입 라이브러리는이 기능을 이미 구현합니다.

읽을 수 !=== 0없지만 사용하는 것이 약간 더 빠르고 간결 합니다.