문자열 같은 감안할 때 :
"개는 긴 꼬리를 가지고 있으며 RED입니다!"
공간을 최대 한 공간으로 유지하기 위해 어떤 종류의 jQuery 또는 JavaScript 마법을 사용할 수 있습니까?
골:
"개는 긴 꼬리를 가지고 있으며 RED입니다!"
str.replace(/ +(?= )/g,'');
필요하지 않은 것은 대체하지 않아도됩니다.
문자열 같은 감안할 때 :
"개는 긴 꼬리를 가지고 있으며 RED입니다!"
공간을 최대 한 공간으로 유지하기 위해 어떤 종류의 jQuery 또는 JavaScript 마법을 사용할 수 있습니까?
골:
"개는 긴 꼬리를 가지고 있으며 RED입니다!"
str.replace(/ +(?= )/g,'');
필요하지 않은 것은 대체하지 않아도됩니다.
답변:
탭, 줄 바꿈 등을 다루고 싶다면 다음 \s\s+
과 ' '
같이 바꾸십시오 .
string = string.replace(/\s\s+/g, ' ');
공백 (따라서 탭, 줄 바꿈 등) 만 포함하지 않으려면 다음을 수행하십시오.
string = string.replace(/ +/g, ' ');
function removeExtraSpaces(string){ return string.replace(/\s{2,}/g, ' ');}
trim()
. 정규식보다 빠릅니다. 당신은 할 수 string.trim().replace(/\s\s+/g, ' ');
또는 string.replace(/\s\s+/g, ' ').trim();
.
/\s\s+/g
그리고 /\s{2,}/g
거기에 \ t \ t 일치합니다 예를 들어, 서로 인접한 적어도 두,하지만 하나의 \ t 일치하지 않는 whitespacey 문자가 일치하지 않습니다. string.replace(/\s+/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의 성능이 어떤지 확인하는 것이 좋습니다.
( / +(?= )/g, ' ');
IE9에서 실패하면 이중 공백이 남습니다 "Foo Bar Baz".replace(/ +(?= )/g, ' ');
.->"Foo Bar Baz"
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+/, '') )
보다 강력한 방법이 돌봐 또한 존재하는 경우, 초기 및 후행 공백을 제거. 예 :
// 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!". 일반적으로 필요한 것은 아닙니다.
초보자 등을위한 포괄적 인 암호화되지 않은 답변.
이것은 작동하지 않는 일부 사람들이 작성한 스크립트를 테스트하는 나와 같은 모든 인형을위한 것입니다.
다음 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 공백을 허용합니다. 작은 따옴표를 사용했지만 작동하지 않았습니다.
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"/>
이것은 특수 문자를 제거하고 공백을 허용하며 여분의 공백을 제거합니다.
var string = "The dog has a long tail, and it is RED!";
var replaced = string.replace(/ +/g, " ");
또는 탭을 교체하려는 경우 :
var replaced = string.replace(/\s+/g, " ");
Jquery에는 기본적으로 "FOo Bar"와 같은 것을 "FOo Bar"로 바꾸는 trim () 함수가 있습니다.
var string = " My String with Multiple lines ";
string.trim(); // output "My String with Multiple lines"
문자열의 시작과 끝에서도 빈 공간을 자동으로 제거하기 때문에 훨씬 유용합니다. 정규식이 필요하지 않습니다.
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>
더 읽어보기 @ 여러 공간을 단일 공간으로 교체
더 많은 제어를 위해 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 (/ ^ \ s + | \ s + $ | (\ s) + / g, "$ 1") 트릭을 수행해야합니다!
우리는 정규식을 사용해야한다는 것을 알고 있지만 인터뷰 중에는 정규식을 사용하지 않고 수행하라는 요청을 받았습니다.
@slightlytyler는 아래 접근법을 사용하는 데 도움이되었습니다.
const testStr = "I LOVE STACKOVERFLOW LOL";
const removeSpaces = str => {
const chars = str.split('');
const nextChars = chars.reduce(
(acc, c) => {
if (c === ' ') {
const lastChar = acc[acc.length - 1];
if (lastChar === ' ') {
return acc;
}
}
return [...acc, c];
},
[],
);
const nextStr = nextChars.join('');
return nextStr
};
console.log(removeSpaces(testStr));