2017-06-14 2 views
2

Ich habe einige Strings kommen in eins nach dem anderen. Wenn sie mehr als 15 Zeichen lang sind, möchte ich den gesamten Inhalt nach 15 Zeichen in Scheiben schneiden, aber nicht bevor ein Leerzeichen erkannt wird (um es lesbar zu halten).Wie schneide ich eine Zeichenkette, wenn Whitespace erkannt wird?

Meine Logik ist zur Zeit etwas in diese Richtung:

   const text = "Microsoft Server 2012 R2"; // text.length = 24 
       let newStr = ''; 
       if(text.length > 15){ // true 
        newStr = text.slice(0, 15) 
       } 
       console.log(newStr); 
       // Desired output: "Microsoft Server 
       // Current output: "Microsoft Serve" 
+0

'split' gibt ein Array zurück, das ich glaube nicht, was Sie wollen –

+0

Also wenn 15. Zeichen in Wort ist, wollen Sie das ganze Wort behalten oder ganzes Wort löschen? – Luke

+0

@MasterYushi du hast Recht, es ist Scheibe. Ich habe einige Sachen getestet, Entschuldigung. – cbll

Antwort

4

Sie können diese regex ersetzen verwenden, um Ihre Arbeit zu erledigen. Dies entspricht 0 oder mehr Nicht-Leerzeichen-Zeichen nach den ersten 15 Zeichen der Eingabe.

var s = 'Microsoft Server 2012 R2' 
 
var r = s.replace(/^(.{15}\S*).*$/, '$1') 
 

 
console.log(r) 
 
//=> Microsoft Server

RegEx Demo

+0

Ist das 'Ersetzen' effizienter, wenn man die gleiche Logik mit einer' RegExp' macht und dann die erste Gruppe bekommt? Oder ist es nur für die Kürze – AxelH

+1

Es ist nur für die Kürze @ AxelH. Wir könnten 'exec' oder' match' machen und auch die passende Zeichenfolge erhalten. – anubhava

1

können Sie passen alle ersten 15 Zeichen mit [^]{15}/[\s\S]{15} und dann 0 entsprechen oder mehr Nicht-Leerzeichen Zeichen mit \S*:

const text = "Microsoft Server 2012 R2"; 
 
let newStr = (m=text.match(/^[^]{15}\S*/)) ? m[0] : ""; 
 
console.log(newStr);

Beachten Sie, dass . Matches alle Zeichen andere als Zeilenumbruch Zeichen, das ist, warum ich [^] (nicht nichts) vorschlagen oder seine tragbare Äquivalent [\s\S]/[\d\D]/[\w\W].

1

Sie können die ersten gewünschten Buchstaben abgleichen und die Zeichen nehmen, bis ein Leerzeichen gefunden wird.

var string = "Microsoft Server 2012 R2", 
 
    short = string.match(/^.{15}[^ ]*/)[0]; 
 
    
 
console.log(short);

1
function hasWhiteSpace(SubText) { 
    return /\s/g.test(SubText); 
} 

Rufen Sie diese Funktion und prüfen, ob Leerraum in d SubText String, der Teilkette von Text bis 15 charactors ist. Daher erhalten Sie einen boolen-Wert, wenn dieser Teilstring ein Leerzeichen enthält. Diese Funktion testet auch auf vorhandene TABs.

Verwandte Themen