2016-05-17 2 views
0

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

"desc: random text string, sender: James, se-status: red, problem-field: I'm a problem field, I'm a problem field, action: runs, target: John, ta-status: blue, status-apply: red, lore: lore ipsum dolor sit amet" 

Я хочу группы, которые получают ключи и значения. Обратите внимание, что в «проблемном поле» есть кавычки. Группы должны получить ключ, а затем найти последнюю запятую перед следующим именем ключа.

Это пример строки. Другие строки могут иметь разные имена полей, поэтому регулярное выражение не должно соответствовать определенным именам полей, например sender или action.

ожидаемый результат группы:

1. "desc" 
2. "random text string" 
3. "sender" 
4. "James" 
5. "se-status" 
6. "red" 
7. "problem-field" 
8. "I'm a problem field, I'm a problem field" 
9: "action" 
10."runs" 
11."target" 
12."John" 
13."ta-status" 
14."blue" 
15."status-apply" 
16."red" 
17."lore" 
18."lore ipsum dolor sit amet" 

Обратите внимание проблемное поле должно быть 1 результат только

Этот вопрос начал, когда я пытался улучшить свой ответ на этот SO вопрос здесь: JS: deserializing a string with a JSON-like structure

Я сделал классический for, но затем пользователь Redu создал ответ на основе регулярных выражений. Но мне не понравилось, потому что имена полей должны были быть исправлены. Поэтому я попытался создать регулярное выражение с группами захвата, которые возвращаются, чтобы проверить последнюю запятую, но я быстро обнаружил, что мои навыки регулярного выражения не идут так далеко (пока). Поэтому я решил создать этот вопрос, чтобы мы могли учиться у мастеров регулярных выражений.

+0

Это вызов. Ключ между последней запятой и: –

+0

Является ли двойное пространство перед действием? –

+0

нет ... редакция. Но пространства не имеют значения. –

ответ

1

Это регулярное выражение может помочь вам:

([\w-]+): ([\w,\s']+)(?:,|$) 

Demo

Это захватить каждый ключ/значение, разделенных с :

+1

Надеюсь, ваше поле проблем не содержит ':' – Nick

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