[javascript] 여러 공간을 단일 공간으로 대체하는 정규식

문자열 같은 감안할 때 :

"개는 긴 꼬리를 가지고 있으며 RED입니다!"

공간을 최대 한 공간으로 유지하기 위해 어떤 종류의 jQuery 또는 JavaScript 마법을 사용할 수 있습니까?

골:

"개는 긴 꼬리를 가지고 있으며 RED입니다!"



답변

탭, 줄 바꿈 등을 다루고 싶다면 다음 \s\s+' '같이 바꾸십시오 .

string = string.replace(/\s\s+/g, ' ');

공백 (따라서 탭, 줄 바꿈 등) 만 포함하지 않으려면 다음을 수행하십시오.

string = string.replace(/  +/g, ' ');


답변

성능에 관심이있는 것 같으므로 firebug로 프로파일 링했습니다. 내가 얻은 결과는 다음과 같습니다.

str.replace( /  +/g, ' ' )       ->  380ms
str.replace( /\s\s+/g, ' ' )     ->  390ms
str.replace( / {2,}/g, ' ' )     ->  470ms
str.replace( / +/g, ' ' )        ->  790ms
str.replace( / +(?= )/g, ' ')    -> 3250ms

이것은 Firefox에서 100k 문자열 대체를 실행합니다.

성능이 문제라고 생각되면 Firebug를 사용하여 자체 프로파일 링 테스트를 수행하는 것이 좋습니다. 인간은 프로그램의 병목 현상이 어디에 있는지 예측하는 데 악명이 높습니다.

또한 IE 8의 개발자 도구 모음에는 프로파일 러가 내장되어 있습니다. IE의 성능이 어떤지 확인하는 것이 좋습니다.


답변

var str = "The      dog        has a long tail,      and it is RED!";
str = str.replace(/ {2,}/g,' ');

편집 :
모든 종류의 공백 문자를 바꾸려면 가장 효율적인 방법은 다음과 같습니다.

str = str.replace(/\s{2,}/g,' ');


답변

이것은 하나의 해결책이지만 모든 공백 문자를 대상으로 합니다 .

"The      dog        has a long tail,      and it is RED!".replace(/\s\s+/g, ' ')

"The dog has a long tail, and it is RED!"

편집 : 이것은 공백을 대상으로하고 하나 이상의 공백을 대상으로하기 때문에 더 좋습니다.

"The      dog        has a long tail,      and it is RED!".replace(/  +/g, ' ')

"The dog has a long tail, and it is RED!"

다른 방법 :

"The      dog        has a long tail,      and it is RED!".replace(/ {2,}/g, ' ')
"The dog has a long tail, and it is RED!"

/\s+/1 문자를 여러 번 확장하는 공백을 대체하고 필요 이상으로 대상을 지정하므로 효율성이 떨어질 수 있으므로 자체적으로 사용하지 않았습니다 .

나는 버그가 있다면 lmk를 깊이 테스트하지 않았습니다.

또한 문자열 교체를 수행하려면 변수 / 속성을 자체 대체물에 다시 할당해야합니다.

var string = 'foo'
string = string.replace('foo', '')

jQuery.prototype.text 사용 :

var el = $('span:eq(0)');
el.text( el.text().replace(/\d+/, '') )


답변

나는이 방법을 가지고 있으며 더 나은 이름이 없기 때문에 Derp 방법이라고 부릅니다.

while (str.indexOf("  ") !== -1) {
    str = str.replace(/  /g, " ");
}

JSPerf에서 실행하면 놀라운 결과가 나타납니다.


답변

보다 강력한 방법이 돌봐 또한 존재하는 경우, 초기 및 후행 공백을 제거. 예 :

// NOTE the possible initial and trailing spaces
var str = "  The dog      has a long   tail, and it     is RED!  "

str = str.replace(/^\s+|\s+$|\s+(?=\s)/g, "");

// str -> "The dog has a long tail, and it is RED !"

귀하의 예에는 이러한 공간이 없지만 매우 일반적인 시나리오이며 허용되는 답변은 다음과 같이 단일 공간으로 자르는 것입니다. “The … RED!”. 일반적으로 필요한 것은 아닙니다.


답변

보다 견고 함 :

기능 트림 (단어)
{
    단어 = word.replace (/ [^ \ x21- \ x7E] + / g, ''); // 비 인쇄 문자를 공백으로 변경
    return word.replace (/ ^ \ s + | \ s + $ / g, ''); // 선행 / 후행 공백 제거
}