So entfernen Sie bestimmte Zeichen, um eine Zeichenfolge?
Habe ich diesen string:
var str = "? this is a ? test ?";
Nun möchte ich dieses:
var newstr = "this is a ? test";
Wie du siehst will ich entfernen, nur diejenigen, die ?
umliegenden (Anfang und Ende), dass die string - (nicht in der Mitte der saite). Wie können tun, dass mit JavaScript?
Hier ist was ich versucht habe:
JS:
var str = "? this is a ? test ?";
var result = str.trim("?");
document.write(result);
So, wie Sie sehen, funktioniert es nicht. Eigentlich bin ich ein PHP-Entwickler und trim()
funktioniert gut in PHP. Jetzt möchte ich wissen, wenn ich trim()
zu tun, dass in JS.
Anzumerken Ich kann machen, dass die Verwendung von regex, aber um ehrlich zu sein, ich hasse regex für diese Art von jobs. Trotzdem gibt es eine bessere Lösung?
Edit: Als dieser erwähnt im Kommentar, ich muss entfernen Sie die beiden ?
- und Leerräume, die um die Zeichenfolge.
- trim entfernt Leerzeichen, das ist nicht whitespace
- Mir ist klar, dass jetzt. Warum nicht separate
0,1
undlength-1,length
in Teilstrings und Scannen für die?
(und Leerzeichen), und dann verketten von strings zurück auf die Haupt-Schnur? - Ich möchte zum entfernen von
?
- und Leerräume, die sich bei dem string. - Ich denke, ein bisschen übertrieben, aber hier wäre die PHP-Funktion trim in js: phpjs.org/functions/trim
- tnx für den link
- Auf der einen Seite sagst du, dass Sie eine bestimmte Zeichenfolge zu beschäftigen, aber auf der anderen, die Sie nicht explizit erklären, ob das der genaue format der Zeichenfolge. Wenn es ist, dann ist die Lösung einfach
str.slice(2, -2)
. Wenn nicht, dann wer weiß, was die Lösung ist, weil Sie noch keine detaillierten Anforderungen. - Wird die Zeichenfolge haben jede Menge
?
am Anfang und am Ende, oder wird es nur sein? [text] ?
? - "Jedenfalls gibt es eine bessere Lösung?": Ich glaube nicht, dass
- Was ist Ihr problem mit regex? Warum ist der Hass..?
- Das ist wirklich unklar. Was sollte die Ausgabe für
??? Test ??
oderTest ?? ??
oder? Test ?? ?
oder einige andere Kombinationen? ?? Test ?
-Test ?? ?
-? Test ??
- Stimmte zu öffnen. Ich kann immer noch nicht fassen, wie die Menschen sind senior etwas in der realen Welt noch Abstimmung zu schließen, so ein leichtes zu begreifen, Programmierung Frage.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Suche für Charakter-Maske und Rückkehr den rest ohne.
Diesem Vorschlag die Verwendung der Bitweises nicht
~
Betreiber für die überprüfung.JS:
slice
einmal am Ende.~
in JS ?while(s.length > 0 && ~mask.indexOf(s[0]))
um zu verhindern, dass aus dem index out of bound exceptionundefined
wenn out ouf gebunden. undindexOf
der Zeichenfolge mit der Suche nachundefined
zurück-1
, die die zu erwartenden nicht geschadet Wert, keine Notwendigkeit, etwas zu ändern. die zusätzlichen whitespace-Zeichen können einfach Hinzugefügt werden, um die Maske.Eine mögliche Lösung wäre die Verwendung von rekursiven Funktionen zum entfernen der unerwünschten führende und nachfolgende Zeichen. Das nicht verwenden von regulären Ausdrücken.
Natürlich ist dies nur eine von vielen möglichen Lösungen. Die Funktion
trim
verwenden würden beideltrim
undrtrim
.Dem Grund, dass
char
ist das erste argument und die Zeichenfolge, die gereinigt werden muss, die zweite ist, um es einfacher zu machen, dies zu ändern in einen funktionalen Programmierstil Funktion, etwa so (ES 2015):trim("??string??", "??") // string.
trim
- Funktion, aber ich denke, ich kann hinzufügen, dass-Funktion.'\n' (new line), '\r' (carriage return), '\t' (tab), '\v' (v-tab), '\0' (null)
if (char.length && str.slice(...
in beiden Funktionen.Verwenden Sie einfach:
JS:
Kein regex:
Schritt-für-Schritt-Erklärung:
Fall, dass Sie weirded heraus, indem Sie die syntax, es ist ein Pfeil-Funktion und ein ternärer operator.
Die Klammern sind überflüssig in der ternären durch die Art und Weise.
Beispiel verwenden:
'!! Plop !!'
alle'!'
noch die Leerzeichen, was in'! Plop !'
.Einfachen Ansatz mit
Array.indexOf
,Array.lastIndexOf
undArray.slice
Funktionen:Update: (Hinweis: der Autor hat gebeten, schneiden Sie die umliegenden chars)
str.slice(2, -2)
wäre schneller alsstr.slice(1, -1).trim()
...?"?a this is a ? test a?"
????? this is a ? test ?
.trim()
Funktion, welche Handlungen alstrim()
in PHP..trim()
; es sagt nur, dass es gut funktioniert. Das bedeutet nicht, müssen Sie eine vollständige Replikation. Es könnte einfach bedeuten, dass was auch immer es ist Sie wollen, können erreicht werden mit PHP.trim()
. Aber Sie immer noch nicht genau beschrieben, was Sie wollen."? ? foo ? bar ? ?"
ist, müssen Sie möglicherweise halten Sie die zweite?
in von jedem Ende. Sollte das Ergebnis sein"foo ? bar"
oder"? foo ? bar ?"
?Hier ist ein Weg, es zu tun, welche Prüfungen für die index-out-of-bounds und macht nur einen einzigen Aufruf
substring
:Beispiel:
halten diese Frage aktuell mit einem ES6 Ansatz:
Ich mochte die bitweise Methode, aber wenn die Lesbarkeit ist ein Anliegen auch hier ist ein anderer Ansatz.
Javascript trim-Methode entfernt nur Leerzeichen und keine Parameter. Für eine benutzerdefinierte trim, haben Sie, um Ihre eigene Funktion. Regex wäre eine schnelle Lösung für Sie und können Sie finden die Implementierung einer benutzerdefinierten trim auf w3schools in Fall, dass Sie nicht wollen, die Mühe, durch die regex-Erstellung. (Sie würden sich nur anpassen musst, um es zu filtern ? anstelle von Leerzeichen
Mithilfe von regex
Können Sie hasse regex, aber nach eine Lösung zu finden, werden Sie fühlen sich cool 🙂