2015-03-11 6 views
0

У меня есть следующая строка:Разбивает строку с различными разделителями, сохраняя при этом разделители

"[email protected]^horses^fish!birds" 

Как я могу получить следующий массив обратно?

['dogs','@cats','^horses','^fish','!birds'] 

По существу, я пытаюсь разделить строку, сохраняя метрики. Я пробовал string.match безрезультатно.

+0

Какой у вас код? – SmokeyPHP

+0

@SmokeyPHP и downvoters: Код не всегда необходим. Есть некоторые случаи, когда это проблема, когда либо вы знаете решение, либо нет, а добавление какого-то кода не сильно изменится. Есть мета-сообщение об этом где-то, что я не могу найти прямо сейчас. – Scimonster

+0

@Scimonster Нет, это не так, но доказательство, что вы пробовали в основном. Я не спускал вниз, но, поскольку OP сказал, что они уже попробовали 'string.match', интересно узнать, что они пытались, чтобы мы могли сказать им, где они поступили неправильно, а затем передали полное решение. Они, возможно, были так близки! – SmokeyPHP

ответ

4

Предполагая, что это ваши только сепараторы, то вы можете сделать это:

var string = "[email protected]^horses^fish!birds"; 
string.replace(/(@|\^|!)/g, '|$1').split('|'); 

Мы в основном добавить свой собственный сепаратор, в этом случае | и разделить его на его основе.

+1

Очень приятное и чистое решение! – silentw

+0

PERFECT! Спасибо @silentw – Cmag

+1

@Cmag Я думаю, вам следует поблагодарить Самера ... просто сказать: p (не обидно, чтобы молчать конечно!) – SmokeyPHP

2

Это делает то, что вы хотите:

str.match(/((^|[^\w])\w+)/g) 

Без более тестовых случаев, хотя, это трудно сказать, насколько надежно это будет.

Это также предполагает большой набор возможных разделителей. Если это небольшая фиксированная сумма, решение Samer было бы хорошим способом пойти

Смежные вопросы