Ich möchte das Array zu sein wie: einzelne, Wörter, feste Reihe von Wörtern.Javascript split Zeichenfolge auf Leerzeichen oder in Anführungszeichen zu Array
Antwort
str.match(/\w+|"[^"]+"/g)
//single, words, "fixed string of words"
Dies verwendet eine Mischung aus Split und Regex-Matching.
Dies gibt das erwartete Ergebnis zurück, obwohl eine einzelne Regexp in der Lage sein sollte, alles zu tun.
// ["single", "words", "fixed string of words"]
aktualisieren Und das ist die verbesserte Version des Verfahrens von St. Markus vorgeschlagen
var str = 'single words "fixed string of words"';
var aStr = str.match(/\w+|"[^"]+"/g), i = aStr.length;
while(i--){
aStr[i] = aStr[i].replace(/"/g,"");
}
// ["single", "words", "fixed string of words"]
danke, ich gehe für die verbesserte Version – Remi
Es gibt ein Problem mit der verbesserten Version, wo, wenn Sie ein Nicht-Wort-Zeichen wie "#" verwenden, wird es verschwinden. – tuhoojabotti
Dies ist eine gute Antwort, aber wenn Sie alles über Regex tun wollen und die Anführungszeichen entfernt haben, habe ich eine neue Antwort hinzugefügt, die dies tut und nicht jedes Ergebnis durchlaufen muss, um die Anführungszeichen anschließend auszublenden. – dallin
ich die verschwindenden Zeichen bemerkt, auch. Ich denke, Sie können sie einschließen - zum Beispiel, um "+" mit dem Wort zu enthalten, verwenden Sie etwas wie "[\ w \ +]" statt nur "\ w".
Die angenommene Antwort ist nicht ganz korrekt. Es trennt sich auf Nicht-Leerzeichen wie. und - und hinterlässt die Zitate in den Ergebnissen. Der bessere Weg, dies zu tun, so dass sie die Zitate ausschließt, ist mit der Erfassung der Gruppen, wie solche:
//The parenthesis in the regex creates a captured group within the quotes
var myRegexp = /[^\s"]+|"([^"]*)"/gi;
var myString = 'single words "fixed string of words"';
var myArray = [];
do {
//Each call to exec returns the next regex match as an array
var match = myRegexp.exec(myString);
if (match != null)
{
//Index 1 in the array is the captured group if it exists
//Index 0 is the matched text, which we use if no captured group exists
myArray.push(match[1] ? match[1] : match[0]);
}
} while (match != null);
myArray jetzt genau enthält, was der OP gefragt:
single,words,fixed string of words
Funktioniert gut, danke. Nur um zu sagen, dass der "ich" Schalter überflüssig ist. –
die komplette sein könnte Lösung: https://github.com/elgs/splitargs
ES6 Lösung unterstützen:
- Split durch Raum mit Ausnahme von innen zitiert
- Entfernen zitiert, aber nicht für entgangenen Backslash Anführungszeichen
- Entkommen Zitat geworden Zitat
- Kann überall in Anführungszeichen setzen
Code:
str.match(/\\?.|^$/g).reduce((p, c) => {
if(c === '"'){
p.quote ^= 1;
}else if(!p.quote && c === ' '){
p.a.push('');
}else{
p.a[p.a.length-1] += c.replace(/\\(.)/,"$1");
}
return p;
}, {a: ['']}).a
Ausgang:
[ 'single', 'words', 'fixed string of words' ]
- 1. Java regex Split auf Leerzeichen nicht vor oder gefolgt von einfachen oder doppelten Anführungszeichen
- 2. Javascript Regex Split mit Leerzeichen und HTML
- 3. Split-String zu Array, entfernen Sie leere Leerzeichen
- 4. PHP split und Leerzeichen
- 5. Split eine Zeichenfolge auf Leerzeichen, Zahlen und Operatoren mit regex
- 6. Split Zeichenfolge einmal in Javascript?
- 7. Aufteilen einer Zeichenfolge durch Leerzeichen, außer wenn in Anführungszeichen enthalten
- 8. Split-String an Wortgrenzen ohne Leerzeichen oder Zeilenumbrüche zu verlieren
- 9. Python Split-String auf Leerzeichen
- 10. Split auf Platz, aber nicht, wenn es ein Doppelpunkt durch Leerzeichen oder wenn es einen Raum in Anführungszeichen ist
- 11. In c Split Char * auf Leerzeichen mit STRTOK-Funktion, außer wenn zwischen Anführungszeichen
- 12. PHP Split oder explodieren Zeichenfolge auf <img> Tag
- 13. Python: Split auf ein Leerzeichen oder einen Bindestrich?
- 14. Split-Linien auf Leerzeichen in Sublime Text
- 15. Wie Zeichenfolge in JavaScript nach Split regex
- 16. Split eine Zeichenfolge in ActionScript?
- 17. entfernen Sie zusätzliche Leerzeichen in Zeichenfolge JavaScript
- 18. Regex eine Zeichenfolge mit Leerzeichen (Anführungszeichen?) In einer if-Anweisung
- 19. Parameter Codierung (Anführungszeichen und Leerzeichen)
- 20. Jinja2 Split String von Leerzeichen
- 21. Split eine Zeichenfolge nur durch das erste Leerzeichen in Python
- 22. Anführungszeichen in Array verloren
- 23. Split JavaScript-Array in einzelne Variablen
- 24. Split String mit doppelten Anführungszeichen in Liste
- 25. Split eine Zeichenfolge in VB.NET
- 26. Anführungszeichen in Javascript ersetzen?
- 27. VBA Split String von Leerzeichen
- 28. Split NSString in Array
- 29. Javascript for() Schleife, split() und Array Frage
- 30. Wie Apostrophe oder Anführungszeichen auf einer JSP (verwendet von JavaScript)
scheint dies auf '.' und '-' sowie Leerzeichen. Das sollte wahrscheinlich 'str.match sein (/ \ S + |" [^ "] +"/g) ' – Awalias
Es gibt ein anderes Problem damit, wenn es gematchte Zitate behandeln muss. Zum Beispiel: ' 'einzelne Wörter "behoben Zeichenkette von "zitierten" Wörtern " Sogar mit der Korrektur von Awalias gibt es: ' ["single", "words", "" fixed "," string "," "of", "words ""] ' Sie müssen mit Escape-Anführungszeichen umgehen, aber nicht stolpern und Backslash und entziehen. Ich denke, dass es irgendwann komplizierter wird, als Sie es wirklich mit einer Regexp handhaben möchten. – jep
@Awalias Ich habe eine bessere Antwort unten. Das Regex-Beispiel sollte eigentlich/[^ \ s "] + |" ([^ "] *)"/g sein. In Bereichen, in denen Sie zitiert werden, teilen Sie sich immer noch auf. Ich fügte eine Antwort hinzu, die das behebt und die Anführungszeichen aus den Ergebnissen entfernt, wie es das OP verlangt. – dallin