2014-12-05 4 views
0

Я пытаюсь написать регулярное выражение для сбора данных, но изо всех сил пытаюсь его закончить.Улучшение регулярных выражений

Из данных:

Code:Name Another-code:Another name 

мне нужно получить массив:

['Code:Name', 'Another-code:Another name'] 

Проблема заключается в том, что коды могут быть почти ничего, кроме пространства.

Я знаю, как это сделать, не используя регулярные выражения, но решил дать им шанс.

ОБНОВЛЕНИЕ: Забыл отметить, что количество элементов может варьироваться от одного до бесконечности. Таким образом, данные:

Code:Name -> ['Code:Name'] 
Code:Name Code:Name Code:Name -> ['Code:Name', 'Code:Name', 'Code:Name'] 

также подходит.

+0

Какой язык вы используете? Просто разделите свой ввод в соответствии с '\ s (? = \ S +? :)' –

+0

Будет использовать JavaScript – zaynetro

+0

Каков ожидаемый результат? Почему вы разделили свой ввод на две строки? –

ответ

2

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

> "Code:Name Another-code:Another name".split(/\s(?=\S+?:)/) 
[ 'Code:Name', 'Another-code:Another name' ] 

ИЛИ

> "Code:Name Another-code:Another name".split(/\s(?=[^\s:]+:)/) 
[ 'Code:Name', 'Another-code:Another name' ] 
+0

Лучшее решение для множественного появления. – Toto

1

Как насчет:

^(\S+:.+?)\s(\S+:.+)$ 

Code:Name находится в 1-й группе и Another-code:Another name в группе 2.

\S+ означает один или более символ, который не является пространством.

+0

Отлично работает на примере, но забыл упомянуть, что количество элементов может варьироваться. Обновлен вопрос – zaynetro

+0

Так что лучше разбить, как ответ @AvinashRaj. – Toto

+0

Истина просто протестировала его – zaynetro

0

Вот способ сделать это без использования регулярных выражений:

var s = 'Code:Name Another-code:Another name'; 

if ((pos = s.indexOf(' '))>0) 
    console.log('[' + s.substr(0, pos) + '], [' + s.substr(pos+1) + ']'); 

//=> [Code:Name], [Another-code:Another name] 
Смежные вопросы