IT

영숫자가 아닌 문자, 줄 바꿈 및 여러 공백을 하나의 공백으로 바꿉니다.

lottoking 2020. 7. 18. 09:42
반응형

영숫자가 아닌 문자, 줄 바꿈 및 여러 공백을 하나의 공백으로 바꿉니다.


교체 할 깔끔한 RegEx 솔루션을 찾고 있습니다.

  • 영숫자가 아닌 모든 문자
  • 모든 뉴 라인
  • 공백의 여러 인스턴스

하나의 공간으로


집에서 놀고있는 사람들을 위해 ( 다음은 효과가 있습니다 )

text.replace(/[^a-z0-9]/gmi, " ").replace(/\s+/g, " ");

내 생각은 RegEx 가 한 번의 시청을 달성 할만 큼 강력 할 것입니다. 내가 필요하다고 생각하는 구성 요소는

  • [^a-z0-9] -영숫자가 아닌 문자를 제거하려는 경우
  • \s+ -모든 공간 컬렉션과 일치
  • \r?\n|\r -모든 줄 바꿈
  • /gmi -글로벌, 다중 라인, 대소 문자 구분

정규식을 올바른 그러나 방식으로 스타일을 지정할 수 없습니다 ( 다음은 작동하지 않습니다 )

text.replace(/[^a-z0-9]|\s+|\r?\n|\r/gmi, " ");


입력

234&^%,Me,2 2013 1080p x264 5 1 BluRay
S01(*&asd 05
S1E5
1x05
1x5


원하는 출력

234 Me 2 2013 1080p x264 5 1 BluRay S01 asd 05 S1E5 1x05 1x5

\W 밑줄남습니다 . 에 대한 동등한 동등한 [^a-zA-Z0-9]것은[\W_]

text.replace(/[\W_]+/g," ");

\W단어 문자 (밑줄 포함) 속기 \w 입니다.[A-Za-z0-9_]

regex101.com의 예


조니 5가 날 이겼어 내가 사용하는 \W+것이 좋습니다 거라고하지 않는 것을 \s같이 text.replace(/\W+/g, " "). 이것은 공백도 포함합니다.


[^a-z0-9]문자 클래스에는 숫자 아닌 문자가 모두 포함 되며 흰색 문자도 포함됩니다!

 text.replace(/[^a-z0-9]+/gi, " ");

글쎄, 당신은 각 패턴에 한정해 추가해야한다고 생각합니다. 또한 캐리지 리턴은 약간 재미 있습니다.

text.replace(/[^a-z0-9]+|\s+/gmi, " ");

편집\s일 경기를 \r하고 \n도.


분음 표시가있는 다른 게시물을 보았습니다.

s.replace(/[^a-zA-Z0-9À-ž\s]/g, "")


이것은 내 오래된 게시물 허용되는 답변이 대부분 좋습니다. 그러나 나는 각 솔루션과 다른 분명한 솔루션을 벤치마킹하기로 결정했습니다 (재미를 위해). 다른 브라우저의 정규식 패턴 사이에 차이가 있는지 궁금합니다.

그래서 기본적으로 나는 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

임의의 이동 길이로로드했습니다.

  • 길이 5000
  • 길이 1000
  • 길이 200

내가 확장 자바 예제 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

사실, 두 브라우저의 정규식 (편차를 고려)은 거의 구별 할 수 없었지만, 이것을 더 많이 실행하면 결과가 조금 더 명확해질 것이라고 생각합니다 (많지는 않음).

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

이것은 실제로 중요한 차이가 아니기 때문에이 결과를 많이 다루지 않을 것입니다. 우리가 실제로 말할 수있는 것은 edge가 더 느리다는 것입니다. : o. 또한 나는 매우 지루했다.

어쨌든 당신은 당신 자신을 위해 벤치 마크를 실행할 수 있습니다.

여기에 Jsperf 벤치 마크

참고 URL : https://stackoverflow.com/questions/20864893/replace-all-non-alpha-numeric-characters-new-lines-and-multiple-white-space-wi

반응형