이것은 내 오래된 게시물이며 허용되는 답변이 대부분 좋습니다. 그러나 나는 각 솔루션과 다른 분명한 솔루션을 벤치마킹하기로 결정했습니다 (재미를 위해). 다른 크기의 문자열을 가진 다른 브라우저의 정규식 패턴 사이에 차이가 있는지 궁금합니다.
그래서 기본적으로 나는 jsPerf 를 사용 했습니다 .
- Chrome 65.0.3325 / Windows 10 0.0.0에서 테스트
- Edge 16.16299.0 / Windows 10 0.0.0에서 테스트
내가 테스트 한 정규식 패턴은
/[\W_]+/g
/[^a-z0-9]+/gi
/[^a-zA-Z0-9]+/g
임의의 문자열 길이로로드했습니다.
내가 사용한 자바 스크립트 예제 var newstr = str.replace(/[\W_]+/g," ");
각 실행은 각 정규 표현식에서 50 개 이상의 샘플로 구성되어 있으며 각 브라우저에서 5 번 실행됩니다.
우리 말을 경주합시다!
결과
Chrome Edge
Chars Pattern Ops/Sec Deviation Op/Sec Deviation
------------------------------------------------------------------------
5,000 /[\W_]+/g 19,977.80 1.09 10,820.40 1.32
5,000 /[^a-z0-9]+/gi 19,901.60 1.49 10,902.00 1.20
5,000 /[^a-zA-Z0-9]+/g 19,559.40 1.96 10,916.80 1.13
------------------------------------------------------------------------
1,000 /[\W_]+/g 96,239.00 1.65 52,358.80 1.41
1,000 /[^a-z0-9]+/gi 97,584.40 1.18 52,105.00 1.60
1,000 /[^a-zA-Z0-9]+/g 96,965.80 1.10 51,864.60 1.76
------------------------------------------------------------------------
200 /[\W_]+/g 480,318.60 1.70 261,030.40 1.80
200 /[^a-z0-9]+/gi 476,177.80 2.01 261,751.60 1.96
200 /[^a-zA-Z0-9]+/g 486,423.00 0.80 258,774.20 2.15
사실 두 브라우저의 Regex (편차를 고려한)는 거의 구별 할 수 없지만, 더 많은 시간이 걸리면 결과가 조금 더 명확해질 것입니다 (그러나 많이는 아닙니다).
1 문자의 이론적 스케일링
Chrome Edge
Chars Pattern Ops/Sec Scaled Op/Sec Scaled
------------------------------------------------------------------------
5,000 /[\W_]+/g 19,977.80 99,889,000 10,820.40 54,102,000
5,000 /[^a-z0-9]+/gi 19,901.60 99,508,000 10,902.00 54,510,000
5,000 /[^a-zA-Z0-9]+/g 19,559.40 97,797,000 10,916.80 54,584,000
------------------------------------------------------------------------
1,000 /[\W_]+/g 96,239.00 96,239,000 52,358.80 52,358,800
1,000 /[^a-z0-9]+/gi 97,584.40 97,584,400 52,105.00 52,105,000
1,000 /[^a-zA-Z0-9]+/g 96,965.80 96,965,800 51,864.60 51,864,600
------------------------------------------------------------------------
200 /[\W_]+/g 480,318.60 96,063,720 261,030.40 52,206,080
200 /[^a-z0-9]+/gi 476,177.80 95,235,560 261,751.60 52,350,320
200 /[^a-zA-Z0-9]+/g 486,423.00 97,284,600 258,774.20 51,754,840
나는 이것이 실제로 큰 차이가 아니기 때문에이 결과에 많이 관여하지 않을 것입니다. 우리가 실제로 알 수있는 것은 가장자리가 느립니다 : o. 또한 나는 지루했다.
어쨌든 자신에 대한 벤치 마크를 실행할 수 있습니다.
여기 Jsperf 벤치 마크