Jeśli spróbuję
"my, tags are, in here".split(" ,")
Otrzymuję następujące informacje
[ 'my, tags are, in here' ]
Podczas gdy ja chcę
['my', 'tags', 'are', 'in', 'here']
javascript
Hoa
źródło
źródło
"my, tags are, in here".split(" ,")
podzieli ciąg tylko wtedy, gdy separatorem jest spacja, po której następuje przecinek. Twój ciąg nie zawiera tej sekwencji, dlatego nie jest podzielony."my, tags are, in here".split(", ")
z zamienioną sekwencją podziału co najmniej podzieli twój oryginalny ciąg na trzy części, po każdym przecinku i spacji. Jeśli potrzebujesz pięciu części, poniższe odpowiedzi określają łańcuch dopasowania jako wyrażenie regularne pasujące do spacji lub przecinka.Odpowiedzi:
String.split
może również akceptować wyrażenie regularne:To konkretne wyrażenie regularne dzieli się na sekwencję jednego lub więcej przecinków lub spacji, tak że np. Wiele kolejnych spacji lub sekwencja przecinek + spacja nie daje w wynikach pustych elementów.
źródło
/,?\s+/
?spaces , before commas
.\s
. Mogę mieć kilka podziałów linii w blobie i też się nimi\s
zajmuję.input.split("/[ ,]+/)"
. Zostaw cudzysłowy (input.split(//)
zamiastinput.split("//")
), a będziesz miał znacznie lepsze wrażenia. Ponieważ, co dziwne, to naprawdę prawdopodobnie działałoby tylko na siebie (generowanie["input.split(\"", ")\""]
).Sugestia użycia
.split(/[ ,]+/)
jest dobra, ale przy zdaniach naturalnych prędzej czy później otrzymasz puste elementy w tablicy. np['foo', '', 'bar']
.Co jest w porządku, jeśli jest to w porządku w twoim przypadku użycia. Ale jeśli chcesz pozbyć się pustych elementów, możesz zrobić:
źródło
Boolean()
konstruktor jest wywoływany na dowolnej wartości, rzutuje tę wartość na wartość logiczną - prawda lub fałsz. W związku z tym wszelkie fałszywe wartości zostaną odfiltrowane z tablicy, w tym puste ciągi.[1, 2, 3].map(String)
"foo, bar,,foobar,".split(/[\s,]+/)
zwraca["foo", "bar", "foobar", ""]
(z powodu wiszącego przecinka na końcu), dzięki!możesz użyć wyrażenia regularnego, aby złapać dowolną długość spacji, a to wyglądałoby tak:
źródło
/\s+/
. Na przykład'a b c '.split(/\s+/) === [ 'a', 'b', 'c', '' ]
. Jeśli.trim()
najpierw będziesz szarpać, będziesz dobry.wynik to :
źródło
input.split(/\s*[\s,]\s*/)
…
\s*
Dopasowuje zero lub więcej znaków odstępu (nie tylko spacje, ale także tabulatory i znaki nowej linii)....
[\s,]
dopasowuje jeden znak odstępu lub jeden przecinekJeśli chcesz uniknąć pustych elementów w danych wejściowych, takich jak
"foo,bar,,foobar"
, to załatwi sprawę:input.split(/(\s*,?\s*)+/)
+
Dopasowuje jeden lub więcej z poprzedniego znaku lub grupy.Edytować:
Dodano
?
po przecinku, który odpowiada zeru lub jednemu przecinkowi.Edycja 2:
Okazuje się, że edycja 1 była błędem. Naprawione. Teraz musi być co najmniej jeden przecinek lub jedna spacja, aby wyrażenie mogło znaleźć dopasowanie.
źródło
"foo,bar,foobar".split(/[ ,]+/)
wraca["foo", "bar", "foobar"]
również.Gdy chcę wziąć pod uwagę dodatkowe znaki, takie jak przecinki (w moim przypadku każdy token można wprowadzić w cudzysłowach), zrobiłbym string.replace (), aby zmienić pozostałe ograniczniki na puste, a następnie podzielić na białe znaki.
źródło
str_variable.replace(/[,'"]+/gi, ' ').split(' ')