2017-08-17 17 views
-3

Ich habe String String, wo es am Anfang und am Ende unbekannte Zeichen hat.Javascript - wie unbekannte Zeichen am Anfang und am Ende zu erkennen?

enter image description here

Wie erkenne ich, dass zunächst unbekannten Zeichen und die letzte? Ich versuchte folgendes, aber es passt nicht zu irgendwelchen \uxxxx Listen wie:

\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f?

Code:

var ab2str = function(buf) { 
     var bufView = new Uint8Array(buf); 
     var encodedString = String.fromCharCode.apply(null, bufView); 
     return decodeURIComponent(escape(encodedString)); 
    }; 

function in(data) { 

    var ch = ab2str(data); ch = ch.toString('utf8'); 
    switch (ch) { 
      case "\u0002": 
      console.log('>>> STARTED'); 
      break; 

      case "\u0003": 
      console.log('>>> ENDED'); 
      break; 

      default: 
       //var WINDOWS_1252 = '\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f !"#$%&\'()*+,-./:;<=>[email protected][\\]^_`abcdefghijklmnopqrstuvwxyz{|}~€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ'; 

       console.log('????????? why always default ???????'); 
      break; 
     } 

} 

EDIT: Datenstrom. \u0002 und \u0003 nicht übereinstimmend.

enter image description here

EDIT: Parser arbeitet

serial.onReceive.addListener(function(receiveInfo) { 
    if (receiveInfo.connectionId !== connectionId) { 
     console.log("FAIL: connectionId mismatch"); 
     return; 
    } 

    var ch = ab2str(receiveInfo.data); 
    ch = ch.toString('utf8');  
    var check = ch.charCodeAt(0); 

    if(check == 2) { 
     console.log('>>> STARTED'); 
     lineBuffer = ""; 
    } 

    switch (ch) { 
     default:   
     lineBuffer += ab2str(receiveInfo.data); 
     console.log('>>> ???: ' , ab2str(receiveInfo.data)); 

     var check_end = lineBuffer.charCodeAt(lineBuffer.length-1); 
     if(check_end == 3) { 
      var cake = lineBuffer.substring(1); 
      cake = cake.substring(0,cake.length-1); 
      console.log('>>> CAKE: ' , cake); 
      lineBuffer = ""; 
     } 
     break; 
    }  

    }); 
+0

Warum jQuery taggen? – GolezTrol

+1

Es gibt mehr Zeichen als 0001 bis 001f. (etwa 65000 mehr in UCS2). Verwenden Sie charCodeAt, um zu sehen, welches Zeichen es tatsächlich ist: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/charCodeAt – GolezTrol

+1

Nun, da ist Ihre Antwort. Das Zeichen ist 2 (=/u0002). Jetzt haben Sie bestätigt, dass es in der Tat ist, dass Sie wieder herausfinden können, warum Ihr Code es nicht gefunden hat. Vielleicht liegt es daran, dass "ch" die gesamte Zeichenfolge enthält, nicht nur das erste Zeichen, und deshalb stimmt der Fall nicht überein. – GolezTrol

Antwort

0

Verwenden regex das Muster entsprechen, Beispiel- '/ ([^ \ U0002] * +) $' Test (. str);

+2

Vielleicht ist meine Regex rostig, aber ich denke, das entspricht Strings, die mit \ u0002 beginnen? Was ist mit den anderen Möglichkeiten? – GolezTrol

+2

str.replace (/ 2 | \ u0002/g, "") - benutze einfach replace .. welches das vordere und letzte Element von der Zeichenkette entfernt –

+1

Ansonsten, wenn du sicher bist, wird es am Anfang und am Ende der string, entferne es einfach und erhalte den Teilstring. Beispiel - var st = "2sdfsdfsdf5" st = ststring (1) // Ausgabe wird "sdfsdfsdf5" sein st = ststring (0, st.length-1) // Ausgabe wird "sdfsdfsdf" sein –

Verwandte Themen