Ersätt flera mellanslag med ett enda mellanslag i en JavaScript-sträng
Jag har strängar med extra blankstegstecken. Varje gång det finns mer än ett blanksteg vill jag att det bara ska vara ett. Hur kan jag göra detta med JavaScript?
Svar #1
Något sådant här:
const str = " a b c "
const result = str.replace(/\s+/g, ' ').trim()
console.log('result', result)
console.log('result.length', result.length)Svar #2
Du kan utöka String för att implementera dessa beteenden som metoder, som i:
String.prototype.killWhiteSpace = function() {
return this.replace(/\s/g, '');
};
String.prototype.reduceWhiteSpace = function() {
return this.replace(/\s+/g, ' ');
};
Detta gör det nu möjligt för dig att använda följande eleganta former för att producera de strängar du vill ha:
"Get rid of my whitespaces.".killWhiteSpace();
"Get rid of my extra whitespaces".reduceWhiteSpace();
Svar #3
Här är en lösning utan regex (bara för skojs skull):
var s = ' a b word word. word, wordword word ';
// with ES5:
s = s.split(' ').filter(function(n){ return n != '' }).join(' ');
console.log(s); // "a b word word. word, wordword word"
// or ES2015:
s = s.split(' ').filter(n => n).join(' ');
console.log(s); // "a b word word. word, wordword word"Kan till och med ersätta filter(n => n) med .filter(String)
Den delar strängen efter mellanslag, tar bort alla tomma element från arrayen (de som var mer än ett enda mellanslag), och sammanfogar alla orden igen till en sträng, med ett enda mellanslag mellan dem.
Svar #4
att använda ett reguljärt uttryck med replace-funktionen gör susen:
string.replace(/\s/g, "")
Svar #5
Jag antar att du vill ta bort mellanslag från början och/eller slutet av strängen (snarare än att ta bort alla mellanslag)?
Om det är fallet behöver du ett regex som detta:
mystring = mystring.replace(/(^\s+|\s+$)/g,' ');
Detta kommer att ta bort alla mellanslag från början eller slutet av strängen. Om du bara vill ta bort mellanslag från slutet, skulle regexen istället se ut så här:
mystring = mystring.replace(/\s+$/g,' ');
Hoppas det hjälper.
