gpt4 book ai didi

javascript - 分割空格避免双引号 JS 字符串 : from 'a "b\\"c" d ' to [' a' ,'"b\\"c"' ,'d' ]

转载 作者:行者123 更新时间:2023-11-29 19:39:04 33 4
gpt4 key购买 nike

我目前正在为自定义文件格式构建一个小型文本编辑器。我有一个 GUI,但我还实现了一个小型输出控制台。我想要实现的是添加一个非常基本的输入字段来执行一些命令并传递参数。命令看起来像:

编译 test.json output.bin -location "Paris, France"-author "Charles\"Demurgos\""

我的问题是获取一个包含以空格分隔的参数的数组,但保留双引号部分,这可能是由 JSON.stringify 生成的字符串,其中包含转义的双引号。

需要明确的是,上一个命令的预期数组是:

[
'compile',
'test.json',
'output.bin',
'-location',
'"Paris, France"',
'-author',
'"Charles \\"Demurgos\\""'
]

如果 indexOf('"') == 0 然后我可以遍历这个数组并应用 JSON.parse 以获得最终结果:

[
'compile',
'test.json',
'output.bin',
'-location',
'Paris, France',
'-author',
'Charles "Demurgos"'
]

感谢这个问题:Split a string by commas but ignore commas within double-quotes using Javascript。如果参数不包含任何双引号,我就能得到我需要的东西。这是我得到的正则表达式:

/(".*?"|[^"\s]+)(?=\s*|\s*$)/g

但是它遇到双引号就退出当前参数,即使转义了。我如何调整此 RegEx 以处理转义或非双引号?如果我提示 action "windowsDirectory\\"otherArg,那么边缘情况会怎样呢,这里的反斜杠已经被转义了,所以即使它后面跟着一个双引号,它也应该退出参数。这是我在以前的项目中试图尽可能避免的问题,但我觉得是时候学习如何正确使用帐户下的转义字符了。

这是一个 JS-Fiddle:http://jsfiddle.net/GwY8Y/1/您可以看到开头的解析很好,但最后的参数是 split 的和错误。

感谢您的帮助。

最佳答案

此正则表达式将为您提供所需的字符串(请参阅 demo ):

"(?:\\"|\\\\|[^"])*"|\S+

像这样使用它:

your_array = subject.match(/"(?:\\"|\\\\|[^"])*"|\S+/g);

解释正则表达式

"                        # '"'
(?: # group, but do not capture (0 or more times
# (matching the most amount possible)):
\\ # '\'
" # '"'
| # OR
\\\\ # two backslashes
| # OR
[^"] # any character except: '"'
)* # end of grouping
" # '"'
| # OR
\S+ # non-whitespace (all but \n, \r, \t, \f,
# and " ") (1 or more times (matching the
# most amount possible))

关于javascript - 分割空格避免双引号 JS 字符串 : from 'a "b\\"c" d ' to [' a' ,'"b\\"c"' ,'d' ],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24069344/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com