4 Stimmen

Aufteilung mit Javascript

Nachfolgend etwas, das ich versuche, mit JavaScript zu tun.

Wenn ich eine Zeichenfolge wie

str = "how are you? hope you are doing good" ;

Jetzt möchte ich sie mit ? (oder . oder !) trennen, aber ich möchte das "?" nicht verlieren. Stattdessen möchte ich die Zeichenkette direkt nach dem Fragezeichen so aufteilen, dass das Fragezeichen mit dem ersten Segment, das wir haben, verbunden ist. auch nach dem ? oder / oder ! muss es ein \s (Leerzeichen), um es in Segmente zu unterteilen

after splitting str what should I get is

["how are you?","hope you are doing good"]

Ich bin nicht sicher, ob es mit Javascript split() Funktion getan werden kann, bitte helfen.

12voto

YOU Punkte 113320
str.match(/\S[^?]*(?:\?+|$)/g)

["how are you?", "hope you are doing good"]

4voto

T.J. Crowder Punkte 948310

Der einfachste und unkomplizierteste Weg, den ich sehe, ist, das "?" zu entfernen und wieder einzufügen:

var parts, n;
parts = str.split("?");
for (n = parts.length - 2; n >= 0; --n) { // Skip the last one
    parts[n] += "?";
}
if (str.charAt(str.length-1) == "?") {    // If it ended with "?", add it back
    parts[parts.length-1] += "?";
}

Alternativ dazu gibt es aber auch einen Weg über RegExp. 編集 Ich habe meine entfernt, S.Marks Regex est so viel besser .

2voto

Sarfraz Punkte 366217

...

var str = "how are you? hope you are doing good";
var data = str.split('?');
data[0] += '?';

alert(data[0]); // result: how are you?
alert(data[1]); // result: hope you are doing good

2voto

Kobi Punkte 129985

Eine Möglichkeit ist die Verwendung einer Regex, wie in:

str = "how are you? hope you are doing good";
var tokens = str.split(/(\?)/)

aber das wird dazu führen, dass die Fragezeichen in ihrem eigenen Token erscheinen: how are you,?, hope you are,?, doing good

Eine bessere Option ist:

var tokens = str.match(/[^?]+\?*/g)

Dadurch bleiben auch mehrere Fragezeichen erhalten: "hello??? how are you?"

1voto

reko_t Punkte 53684

Wenn JS unterstützt regexp look-behinds alles, was Sie brauchen würde, ist Split durch /(?<=\?)/ aber leider ist das nicht der Fall. Allerdings können Sie sehr leicht das gleiche Verhalten mit dem match() Funktion:

var str = "how are you? hope you are doing good";
var data = str.match(/(?!$)[^?]*\??/g);

Sie erhalten ["how are you?", " hope you are doing good"]

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X