gpt4 book ai didi

javascript - 将字符串转换为 shell 参数

转载 作者:行者123 更新时间:2023-11-30 08:00:25 26 4
gpt4 key购买 nike

我感兴趣的是如何将 bash 输入解析为参数。

例如,通过使用 process.argv,我们在 NodeJS 中得到一个字符串数组(但这与语言无关)。

我的问题是如何将像 "node foo.js --foo "bar baz"-b foo" 这样的输入解析成像 process.argv 这样的数组(或其他语言中的等效项)返回(例如 ["node", "foo.js", "--foo", "\"bar baz\"", "-b", "foo"]?

按空格分隔是不够的(因为引号)。是否可以使用一些更复杂的正则表达式来处理引号并获得这样的数组?

最佳答案

由于似乎明确要求使用正则表达式解决方案,而这是适合解析器的任务,这里有一个令人兴奋的正则表达式单行代码。

考虑规范:

  • JS 兼容
  • 按空格标记,但将 "..."'...' 放在一起

可以使用一个简单的match 函数来查找值,其缺点是无法很好地检测到引号的嵌套转义(正则表达式很难进行递归匹配。)

>>> str = "node foo.js --foo \"bar baz\" -b foo";
str.match(/"[^"]+"|'[^']+'|\S+/g)
<<< ["node", "foo.js", "--foo", "\"bar baz\"", "-b", "foo"]

(简体)正则表达式解释:

  • "[^"]+"|'[^']+' 是一个子模式,用于查找除了引号本身之外的任何引号对。
  • | 替代另一个选项。
  • \S\s 的否定:它匹配非空白序列,这有效地断言我们匹配之前未收集的标记。 + 对整个字符串进行量化。

关于javascript - 将字符串转换为 shell 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29655760/

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