[javascript] JavaScript를 확인하는 가장 빠른 방법은 JavaScript에 다른 하위 문자열이 포함되어 있습니까?

JavaScript에서 성능 문제를 해결하고 있습니다. 그래서 그냥 묻고 싶습니다 : 문자열에 다른 하위 문자열이 포함되어 있는지 확인하는 가장 빠른 방법은 무엇입니까 (부울 값이 필요합니다)? 아이디어와 샘플 스 니펫 코드를 제안 해 주시겠습니까?



답변

두 가지 가능성이 있습니다.

  1. 정규식 :

    (new RegExp('word')).test(str)
    // or
    /word/.test(str)
  2. indexOf:

    str.indexOf('word') !== -1

정규 표현식이 더 빠른 것 같습니다 (적어도 Chrome 10에서는).

성능 테스트-짧은 건초 더미
성능 테스트-긴 건초 더미


2011 년 업데이트 :

어떤 방법이 더 빠르다고 확신 할 수는 없습니다. 브라우저 간의 차이점은 엄청납니다. Chrome 10 indexOf에서는 빠르지 만 Safari 5에서는 indexOf다른 방법보다 속도가 느립니다.

당신은 자신을보고 시도해야합니다. 그것은 당신의 필요에 달려 있습니다. 예를 들어 대소 문자를 구분하지 않는 검색은 정규식을 사용하면 훨씬 빠릅니다.


2018 업데이트 :

사람들이 직접 테스트를 실행하지 못하도록하기 위해 가장 일반적인 브라우저의 현재 결과는 다음과 같습니다. 백분율은 다음으로 빠른 결과 (브라우저마다 다름)에 비해 성능이 향상되었음을 나타냅니다.

Chrome : indexOf (~ 98 % 빠름) <-- wow

Firefox : 캐시 된 RegExp (~ 18 % 빠름)

IE11 : 캐시 된 RegExp (~ 10 % 빠름)

Edge : indexOf (~ 18 % 빠름)

Safari : 캐시 된 RegExp (~ 0.4 % 빠름)

참고 정규식 캐시는 다음과 같습니다 var r = new RegExp('simple'); var c = r.test(str);반대로 :/simple/.test(str)


답변

이것이 당신을 위해 작동합니까?

string1.indexOf(string2) >= 0

편집 : string2에 반복 패턴이 포함되어 있으면 RegExp보다 빠르지 않을 수 있습니다. 일부 브라우저에서는 indexOf가 RegExp보다 훨씬 느릴 수 있습니다. 의견을 참조하십시오.

편집 2 : 문자열이 매우 길거나 반복되는 패턴이 포함 된 경우 RegExp가 indexOf보다 빠를 수 있습니다. 의견과 @Felix의 답변을 참조하십시오.


답변

가장 빠른

  1. (ES6) 포함
    var string = "hello",
    부분 문자열 = "lo";
    string.includes (하위 문자열);
  1. ES5 및 이전 indexOf
    var string = "hello",
    부분 문자열 = "lo";
    string.indexOf (하위 문자열)! == -1;

http://jsben.ch/9cwLJ

여기에 이미지 설명을 입력하십시오


답변

ES6에서는이 includes()방법을 사용하여 한 문자열이 다른 문자열 내에서 반환되는지 true또는 false적절하게 반환되는지 확인할 수 있습니다 .

var str = 'To be, or not to be, that is the question.';

console.log(str.includes('To be'));       // true
console.log(str.includes('question'));    // true
console.log(str.includes('nonexistent')); // false

여기에 jsperf 가 있습니다

var ret = str.includes('one');

var ret = (str.indexOf('one') !== -1);

jsperf에 표시된 결과는 둘 다 잘 수행되는 것 같습니다.


답변

간단한 for 루프를 사용하여 문자열의 모든 요소를 ​​반복하고 using을 사용하여 비교하는 charAt것이 indexOf또는 보다 빠릅니다 Regex. 코드와 증명은 JSPerf 에서 구할 수 있습니다 .

ETA : indexOf그리고 charAt모두 jsperf.com에 나와있는 브라우저 범위의 데이터에 따라 크롬 모바일에 유사 끔찍한 수행


답변

: 간단한 문자열을 찾는 같이 IndexOf () 메소드를 사용하여 정규 표현식을 사용하기 위해 거의 동일 http://jsperf.com/substring – 그래서 어느 하나 쓰기보다 쉽게 보인다 선택할.


답변

나는 당신을 위해 jsben.ch했다 http://jsben.ch/#/aWxtF … 같이 IndexOf 조금 더 빠른 것 같다.