development

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

big-blog 2020. 2. 18. 22:51
반응형

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


다음과 같은 문자열이 제공됩니다.

"개는 긴 꼬리를 띠고 빨간색입니다!"

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

골:

"개는 긴 꼬리를 띠고 빨간색입니다!"

탭, 줄 바꿈 등을 다루고 싶다면 다음 \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 문자열 대체를 실행합니다.

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

또한 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 !"

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


보다 강력한 :

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

나는 제안한다

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

단지 공백
또는

string = string.replace(/(\s)+/g,"$1");

여러 수익을 단일 수익으로 전환하는 데에도 사용됩니다.


바꾸기를 사용하지 않으려는 경우 다른 해결책이 있습니다 (바꾸기 자바 스크립트를 사용하지 않고 문자열에서 공백을 바꿉니다)

var str="The dog      has a long   tail, and it     is RED!";
var rule=/\s{1,}/g;
str = str.split(rule).join(" "); 
document.write(str);

나는 파티에 늦었다는 것을 알고 있지만 좋은 해결책을 찾았습니다.

여기있어:

var myStr = myStr.replace(/[ ][ ]*/g, ' ');

초보자 등을위한 포괄적 인 암호화되지 않은 답변.

이것은 작동하지 않는 일부 사람들이 작성한 스크립트를 테스트하는 나와 같은 모든 인형을위한 것입니다.

다음 3 개의 예는 다음 3 개의 웹 사이트에서 특수 문자와 추가 공백을 제거하기 위해 수행 한 단계입니다 (모두 완벽하게 작동 함) {1. EtaVisa.com 2. EtaStatus.com 3. Tikun.com} 그래서 나는 이것들이 완벽하게 작동한다는 것을 알고 있습니다.

우리는 이것을 한 번에 50 개 이상으로 묶었 고 아무런 문제도 없었습니다.

// 특수 문자 + 0-9를 제거하고 글자 만 허용합니다 (대문자 및 소문자)

function NoDoublesPls1()
{
var str=document.getElementById("NoDoubles1");
var regex=/[^a-z]/gi;
str.value=str.value.replace(regex ,"");
}

// 특수 문자를 제거하고 문자 (대문자 및 소문자)와 0-9 및 공백 만 허용합니다.

function NoDoublesPls2()
{
var str=document.getElementById("NoDoubles2");
var regex=/[^a-z 0-9]/gi;
str.value=str.value.replace(regex ,"");
}

// 특수 문자를 제거하고 문자 (대문자 및 소문자)와 0-9 AND 공백 만 허용 // 끝 부분의 .replace (/ \ s \ s + / g, "")는 // 공백을 제거 작은 따옴표를 사용했지만 작동하지 않았습니다.

function NoDoublesPls3()
{    var str=document.getElementById("NoDoubles3");
var regex=/[^a-z 0-9]/gi;
str.value=str.value.replace(regex ,"") .replace(/\s\s+/g, " ");
}

:: NEXT :: # 3을 a .js// No Noububles.js라고 부릅니다.

:: 다음 :: 페이지에 JS를 포함시킵니다.

 <script language="JavaScript" src="js/NoDoubles.js"></script>

양식 필드에 다음을 포함하십시오 :

<INPUT type="text" name="Name"
     onKeyUp="NoDoublesPls3()" onKeyDown="NoDoublesPls3()" id="NoDoubles3"/>

이렇게 생겼어요

<INPUT type="text" name="Name" onKeyUp="NoDoublesPls3()" onKeyDown="NoDoublesPls3()" id="NoDoubles3"/>

이것은 특수 문자를 제거하고 공백을 허용하며 여분의 공백을 제거합니다.


또한 가능성 :

str.replace( /\s+/g, ' ' )

Jquery에는 기본적으로 "FOo Bar"와 같은 것을 "FOo Bar"로 바꾸는 trim () 함수가 있습니다.

var string = "  My     String with  Multiple lines    ";
string.trim(); // output "My String with Multiple lines"

문자열의 시작과 끝에서도 빈 공간을 자동으로 제거하기 때문에 훨씬 유용합니다. 정규식이 필요하지 않습니다.


var myregexp = new RegExp(/ {2,}/g);

str = str.replace(myregexp,' ');

var string = "The dog      has a long   tail, and it     is RED!";
var replaced = string.replace(/ +/g, " ");

또는 탭을 바꾸려면 다음을 수행하십시오.

var replaced = string.replace(/\s+/g, " ");

sed system 명령을 사용하여 설명 된 다음 정규식을 사용할 수 있습니다. 비슷한 정규식을 다른 언어 및 플랫폼에서 사용할 수 있습니다.

test라고 말하는 파일에 텍스트를 추가하십시오.

manjeet-laptop:Desktop manjeet$ cat test
"The dog      has a long   tail, and it     is RED!"

다음 정규식을 사용하여 모든 공백을 단일 공백으로 바꿀 수 있습니다.

manjeet-laptop:Desktop manjeet$ sed 's/ \{1,\}/ /g' test
"The dog has a long tail, and it is RED!"

이것이 목적을 달성하기를 바랍니다.


여러 공간을 단일 공간으로 바꾸려면이 방법을 사용하십시오.

<script type="text/javascript">
    var myStr = "The dog      has a long   tail, and it     is RED!";
    alert(myStr);  // Output 'The dog      has a long   tail, and it     is RED!'

    var newStr = myStr.replace(/  +/g, ' ');
    alert(newStr);  // Output 'The dog has a long tail, and it is RED!'
</script>

더 읽어보기 @ 여러 공간을 단일 공간으로 교체


var text = `xxx  df dfvdfv  df    
                     dfv`.split(/[\s,\t,\r,\n]+/).filter(x=>x).join(' ');

결과:

"xxx df dfvdfv df dfv"

더 많은 제어를 위해 replace 콜백을 사용하여 값을 처리 할 수 ​​있습니다.

value = "tags:HUNT  tags:HUNT         tags:HUNT  tags:HUNT"
value.replace(new RegExp(`(?:\\s+)(?:tags)`, 'g'), $1 => ` ${$1.trim()}`)
//"tags:HUNT tags:HUNT tags:HUNT tags:HUNT"

이 스크립트는 단어와 트림 사이의 공백 (여러 공백, 탭, 리턴 등)을 제거합니다.

// Trims & replaces any wihtespacing to single space between words
String.prototype.clearExtraSpace = function(){
  var _trimLeft  = /^\s+/,
      _trimRight = /\s+$/,
      _multiple  = /\s+/g;

  return this.replace(_trimLeft, '').replace(_trimRight, '').replace(_multiple, ' ');
};

replace가 사용되지 않으면 string = string.split (/ \ W + /);

참고 URL : https://stackoverflow.com/questions/1981349/regex-to-replace-multiple-spaces-with-a-single-space



도와주세요.
반응형