我目前正在为自定义文件格式构建一个小型文本编辑器。我有一个 GUI,但我还实现了一个小型输出控制台。我想要实现的是添加一个非常基本的输入字段来执行一些命令并传递参数。
命令如下所示:
compile test.json output.bin -location "Paris, France" -author "Charles \"Demurgos\""
我的问题是获取一个包含空格分隔参数的数组,但保留双引号部分,这可能是由JSON.stringify
里面包含转义的双引号。
需要明确的是,上一个命令的预期数组是:
[
'compile',
'test.json',
'output.bin',
'-location',
'"Paris, France"',
'-author',
'"Charles \\"Demurgos\\""'
]
然后我可以迭代这个数组并应用JSON.parse
if indexOf('"') == 0
得到最终结果:
[
'compile',
'test.json',
'output.bin',
'-location',
'Paris, France',
'-author',
'Charles "Demurgos"'
]
感谢这个问题:使用 Javascript 用逗号分割字符串,但忽略双引号内的逗号 https://stackoverflow.com/questions/11456850/split-a-string-by-commas-but-ignore-commas-within-double-quotes-using-javascript。如果参数不包含任何双引号,我就能得到我需要的东西。这是我得到的正则表达式:
/(".*?"|[^"\s]+)(?=\s*|\s*$)/g
但遇到双引号时就会退出当前参数,即使是转义了。我如何调整这个正则表达式来处理转义或非双引号?如果我提示的话,边缘情况又如何呢?action "windowsDirectory\\" otherArg
,这里反斜杠已经被转义了,所以即使它后面跟着双引号,它也应该退出参数。
这是我在之前的项目中试图尽可能长时间避免的问题,但我觉得现在是我学习如何正确使用帐户下转义字符的时候了。
这是一个 JS-Fiddle :http://jsfiddle.net/GwY8Y/1/ http://jsfiddle.net/GwY8Y/1/您可以看到开头解析良好,但最后一个参数是分裂的并且存在错误。
感谢您的任何帮助。