【发布时间】:2011-04-23 17:57:18
【问题描述】:
我正在开发一个 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)
这个想法是,当商店关闭时,我可以调用该触发器的第四个参数(它本身就是一个触发器)。我相信您已经猜到了,这里的问题是,如果我根据“:”拆分初始触发器字符串,那么它会将回调触发器分解为主触发器的其他(混乱)参数。我不想要那个。也不,我不想做任何事情,比如将次要触发器由另一个角色拆分(出于稍后生成的原因,并且因为我想有时我会想要在更深层次上嵌套很多触发器并且我不想使用不同的字符。我知道变通方法,但我想学习用不包含在其他特定字符中的字符分割的正确方法。
由于我用括号封装回调参数,我认为必须有一个干净的正则表达式,我可以使用所有冒号来分割主触发器字符串,而不是在括号内。
很遗憾,我无法想出正确的表达方式来完成这项工作。
有什么想法吗?
非常感谢你们中的任何人可能获得的任何帮助。 :)
【问题讨论】:
-
确定是否可以使用正则表达式解析的关键问题:括号可以嵌套吗?
-
@cobbal:我会说是的,引用“我想有时我会想要在更深层次嵌套很多触发器”。
-
@ChristianSemrau 啊,我似乎错过了这一点。
-
离题建议:使用JSON。你的生活会更轻松。
-
@Zirak 在这里使用 JSON 不会有任何区别 - JSON 只会将 XML 替换为结构容器,而我正在处理的数据是一个字符串(并且应该保持不变)。如果我将触发器构造为 XML(出于各种原因我不会这样做),那么它可能是相关的。郑重声明,我不同意 JSON 与 XML 之战; XML 的额外膨胀对于乍一看结构上可读的数据容器来说是一个很小的代价(特别是因为我现在手动编写这些数据文件)。
标签: javascript regex arrays split