영숫자가 아닌 문자, 줄 바꿈 및 여러 공백을 하나의 공백으로 바꿉니다.
교체 할 깔끔한 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_]
조니 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. 또한 나는 매우 지루했다.
어쨌든 당신은 당신 자신을 위해 벤치 마크를 실행할 수 있습니다.
'IT' 카테고리의 다른 글
쉘 펼쳐에서 MySQL 명령을 실행하는 방법은 무엇입니까? (0) | 2020.07.18 |
---|---|
JQuery에서 파일 입력에서 데이터 가져 오기 오기 (0) | 2020.07.18 |
안드로이드 스튜디오에서 2 개의 패싯 알 수없는 패싯 유형을로드 할 수 없습니다 : android 및 android-gradle (0) | 2020.07.18 |
IIS 8.0에서 글꼴 얼굴이 작동하지 않습니다. (0) | 2020.07.18 |
Swift에서 단색으로 UIImage 생성 (0) | 2020.07.18 |