영숫자가 아닌 모든 문자, 새 줄 및 여러 공백을 하나의 공백으로 바꾸기
대체할 깔끔한 정규식 솔루션을 찾고 있습니다.
- 영숫자가 아닌 모든 문자
- 모든 새 줄
- 공백의 모든 다중 인스턴스
하나의 공간으로
집에서 노는 사람들을 위해 (다음이 작동합니다)
text.replace(/[^a-z0-9]/gmi, " ").replace(/\s+/g, " ");
제 생각에는 정규식은 아마도 한 진술에서 이를 달성할 수 있을 정도로 강력할 것이라고 생각합니다.내가 필요하다고 생각하는 구성 요소는
[^a-z0-9]
가 아닌 문자를\s+
의 공백 합니다.\r?\n|\r
new line 과일치모인라일치▁match모/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
도 마찬가지야
갱신하다
브라우저 환경은 빠르게 변화하며, 이러한 벤치마크는 안타깝게도 시대에 뒤떨어지며, 이 문서를 읽을 때 오해의 소지가 있습니다.
이것은 저의 오래된 게시물입니다, 다른 답변들은 대부분 좋습니다.하지만 저는 각 솔루션과 또 다른 분명한 솔루션을 (재미삼아) 벤치마킹하기로 결정했습니다.저는 크기가 다른 문자열을 가진 브라우저마다 정규식 패턴에 차이가 있는지 궁금합니다.
그래서 기본적으로 jsPerfon을 사용했습니다.
- Chrome 65.0.3325 / Windows 100.0.0에서 테스트
- Edge 16.16299.0 / Windows 100.0.0에서 테스트
제가 테스트한 정규식 패턴은
/[\W_]+/g
/[^a-z0-9]+/gi
/[^a-zA-Z0-9]+/g
무작위로 문자열 길이를 입력했습니다.
- 길이 5000
- 길이 1000
- 길이 200
I 사용한 javascript 가내한javascript 제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. 게다가 저는 너무 지루했습니다.
어쨌든 여러분은 스스로 벤치마크를 실행할 수 있습니다.
유니코드가 사용될 때
text.replace(/[^\p{L}\p{N}]+/gu," ");
설명.
NODE EXPLANATION
--------------------------------------------------------------------------------
[^\p{L}\p{N}]+ Any character except Unicode letters and digits
(1 or more times (matching the most amount possible))
JavaScript 코드 조각:
const text = `234&^%,Me,2 2013 1080p x264 5 1 BluRąy
S01(*&aśd 05
S1E5
1x05
1x5`
console.log(text.replace(/[^\p{L}\p{N}]+/gu, ` `))
A는 분음 부호가 있는 다른 게시물을 보았고, 그것은 훌륭합니다.
s.replace(/[^a-zA-Z0-9À-ž\s]/g, "")
대시로 대체하려면 다음을 수행합니다.
text.replace(/[\W_-]/g,' ');
위의 전문가 답변 이후에도 여전히 어려움을 겪고 있는 사람(나처럼...)을 위해 Visual Studio 2019에서 이 작업이 가능합니다.
outputString = Regex.Replace(inputString, @"\W", "_");
추가하는 것을 기억하십시오.
using System.Text.RegularExpressions;
const processStirng = (str) => (
str
.replace(/[^a-z0-9\s]/gi, '') // remove all but alpha-numeric and spaces
.replace(/ +/g, ' '); // remove duplicated spaces
);
processSting(' $ your string here #');
언급URL : https://stackoverflow.com/questions/20864893/replace-all-non-alphanumeric-characters-new-lines-and-multiple-white-space-wit
'programing' 카테고리의 다른 글
Node.js - 현재 파일 이름 가져오기 (0) | 2023.07.24 |
---|---|
wkhtmltopdf Docker 이미지 설치 및 실행 방법 (0) | 2023.07.24 |
Angular2 코드의 TypeScript 오류: 'module' 이름을 찾을 수 없습니다. (0) | 2023.07.24 |
HTML 특수 문자를 제거하는 방법은 무엇입니까? (0) | 2023.07.24 |
.용 오라클 데이터 공급자.NET: 연결 요청 시간이 초과되었습니다. (0) | 2023.07.24 |