Я работаю над игровым движком HTML5 / JavaScript, и я столкнулся со сценарием, которого у меня никогда не было, и не могу понять, как я могу это осуществить.
Проще говоря, я хочу разбить строку на массив по символу - при условии, что этот символ не находится в скобках.
По сути, в файлах XML для таких вещей, как элементы / плитки, я храню "триггеры ", то есть операторы, дающие правила для операций, которые будет выполнять код.Различные параметры одного триггера разделяются двоеточием (:), и для элемента может быть несколько триггеров, причем каждый триггер разделяется запятой.Вот пример:
<response trigger="npc:self:dialog:1:3">No, thank you.</response>
(Это в основном говорит: если выбран этот ответ, сделайте NPC, который задал начальный цикл вопроса, к конкретному сообщению определенного преобразования)
Двигаясь дальше: мне понадобилась возможность инкапсулировать триггеры обратного вызова в скобках параметров с определенными триггерами.Вот пример:
<response trigger="shop:open:1:(npc:self:dialog:1:4)">Yes, please.</response>
(Это в основном говорит: откройте определенный магазин, и когда магазин закроется, перейдите к определенному разговору / сообщению для говорящего NPC)
Идея состоит в том, что когда магазин закрыт, я могу вызвать 4-й параметр этого триггера (который сам является триггером).Как я уверен, вы уже догадались, проблема здесь в том, что если я разделю начальную строку триггера на основе «:», то он разбивает триггер обратного вызова как другие (грязные) параметры основного триггера.Я не хочу этогоТакже я не хочу делать что-то вроде разделения вторичных триггеров другим персонажем (по причинам генерации позже, и потому что я представляю, что будут времена, когда я захочу вкладывать много триггеров на более глубокие уровни, и я не хочу использоватьразные символы. Я знаю обходные пути, но я хотел бы узнать, как правильно разделить символ, который не содержится в других конкретных символах.
Поскольку я инкапсулирую параметр обратного вызова в скобках,Я полагаю, что должно быть чистое регулярное выражение, которое я могу использовать, чтобы разделить основную строку триггера по всем двоеточиям, а НЕ в скобках..
Есть идеи?
Я очень ценю любую помощь, которую может оказать любой из вас.:)