Mam ciąg:
var string = "aaaaaa<br />† bbbb<br />‡ cccc"
Chciałbym podzielić ten ciąg za pomocą separatora, <br />
po którym następuje znak specjalny.
Aby to zrobić, używam tego:
string.split(/<br \/>&#?[a-zA-Z0-9]+;/g);
Dostaję to, czego potrzebuję, z wyjątkiem tego, że tracę ogranicznik. Oto przykład: http://jsfiddle.net/JwrZ6/1/
Jak mogę zachować separator?
javascript
regex
Miloš
źródło
źródło
var delim = "<br/>";
?Odpowiedzi:
Użyj (dodatniego) lookahead, aby wyrażenie regularne stwierdzało, że znak specjalny istnieje, ale w rzeczywistości go nie dopasowuje:
Zobacz to w akcji:
źródło
0
na końcu każdego ciąguMiałem podobny, ale nieco inny problem. W każdym razie, oto przykłady trzech różnych scenariuszy, w których należy zachować separator.
Ostrzeżenie: czwarty będzie działał tylko do dzielenia pojedynczych znaków. ConnorsFan przedstawia alternatywę :
źródło
g
końca.match
niechciwego rozwiązania dla tych przykładów:"11、22、33".match(/.*?、|.+$/g)
->["11、", "22、", "33"]
. Uwaga/g
modyfikator jest kluczowa dla meczu.Jeśli zawiniesz separator w parantezach, będzie on częścią zwróconej tablicy.
W zależności od tego, którą część chcesz zachować, zmień pasującą podgrupę
Możesz ulepszyć wyrażenie, ignorując wielkość liter string.split (/ () & #? [A-z0-9] +; / gi);
Możesz dopasować do predefiniowanych grup, takich jak ta:
\d
równa się[0-9]
i\w
równa się[a-zA-Z0-9_]
. Oznacza to, że Twoje wyrażenie może wyglądać tak.JavaScriptKit zawiera dobre odniesienie do wyrażeń regularnych .
źródło
odpowiedziałem na to tutaj również JavaScript Split Wyrażenie regularne zachowaj separator
użyj wzorca wyprzedzenia (? = wzorzec) w przykładzie wyrażenia regularnego
da to następujący wynik.
Można również podzielić bezpośrednio
dając ten sam wynik
źródło
Zrobiłem modyfikację odpowiedzi jichi i umieściłem ją w funkcji, która również obsługuje wiele liter.
odpowiedzi jichi Trzecia metoda nie zadziała w tej funkcji, więc wybrałem czwartą metodę i usunąłem puste spacje, aby uzyskać ten sam wynik.
edit: druga metoda, która wyłącza tablicę do podziału char1 lub char2
stosowanie:
źródło
Funkcja rozszerzająca rozdziela ciąg za pomocą podłańcucha lub wyrażenia regularnego, a separator jest umieszczany zgodnie z drugim parametrem przed lub za.
Test:
źródło
Używałem tego:
Tyle że nie powinieneś się z tym bawić
String.prototype
, więc oto wersja funkcji:Więc możesz zrobić:
Otrzymasz:
źródło