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

2023-12-28

我目前正在为自定义文件格式构建一个小型文本编辑器。我有一个 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/您可以看到开头解析良好,但最后一个参数是分裂的并且存在错误。

感谢您的任何帮助。


这个正则表达式将为您提供所需的字符串(请参阅demo http://regex101.com/r/tM2tB3):

"(?:\\"|\\\\|[^"])*"|\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))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

分割空格避免双引号 JS 字符串:从 'a "b \\" c" d ' 到 ['a','"b \\" c"','d'] 的相关文章

随机推荐

  • 无法加载私钥。 (PEM例程:PEM_read_bio:无起始行:pem_lib.c:648:预期:任何私钥)[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有一个 key 文件 它是 PEM 格式的私钥文件 我没有制作这个文件 但我从某个地方得到了这个 我想使用 openssl 工具查看其
  • 如何对齐Gridview中心

    我想将 GridView 居中对齐 我还是这样 正如您在上图中看到的 我在左侧获取图像 但我想在中心显示图像 如下所示 另一件事是获得文本背景的额外宽度我如何仅在图像中显示文本背景 现在 gridview 位于中心 但仍然遇到问题 请参阅文
  • 在 Titanium 应用程序中找不到库 stlport_shared

    我想创建一个 Titanium 模块 因此我有一个扩展 KrollModule 及其方法的类 Kroll method public void example Activity activity this getActivity Strin
  • git 子模块的公共子模块

    我有一个申请main由多个子模块组成A B and utility functions 这两个子模块A and B本身包含子模块utility functions main A utility functions B utility fun
  • Tesseract-OCR 3.02 与 libc++

    Xcode 4 6 iOS SDK 6 1 tesseract ocr 3 02 由于最新的 OpenCV 版本是使用构建的libc 并且 tesseract ocr 是使用构建的libstdc 库 它们不能在一个 xcode 项目中一起使
  • 禁止用户订阅 Firebase 主题

    如何消除应用程序用户拨打电话的机会FirebaseMessaging subscribeToTopic String 为了仅在服务器端处理主题管理 Firebase 云消息传递主题是公开的 无法阻止特定用户订阅它们
  • ERRO[0043] 拨打 gRPC 失败:无法升级到 h2c,收到 501

    当我尝试使用以下命令构建 Dockerfile 时docker build t myimage1 今天我收到这个错误 ERRO 0043 failed to dial gRPC unable to upgrade to h2c receiv
  • 用lark语法识别多行部分

    我正在尝试编写一个简单的语法来解析具有多行部分的文本 我不知道该怎么做 这是我到目前为止写的语法 如果有任何帮助 我们将不胜感激 ps 我意识到 lark 对于这个问题来说太过分了 但这只是我试图解析的一个非常简化的版本 from unit
  • 调试多线程应用程序[重复]

    这个问题在这里已经有答案了 我有一个用 C 和 MFC 编写的应用程序 它在 Windows 上运行多线程 有时我确实会收到一些抱怨 例如由于这些线程而导致的死锁或未处理的异常 通常我使用 Visual Studio 如果问题可重现 或使用
  • 恢复 git merge 冲突标志

    我正在尝试找出一种与团队其他成员共享合并冲突的方法 我们有一些非常大的分支 合并它们会产生很多冲突 我尝试了几种不同的方法 我当前的尝试包括将处于冲突状态的文件推送到远程存储库 将合并标记留在文件中 然后运行一个烦人的长别名来 grep 通
  • SciPy Optimizer 给出不满足约束的结果

    我正在使用 scipy optimize minimize 来解决问题 但包给出的结果违反了约束 这种情况非常简单 只给出一个目标函数和一个约束 这是代码 import math import numpy as np import scip
  • 将所有 QLineEdits 设置为只读

    我试图将我的所有 QLineEdits 大约有 150 个 设置为只读 有没有办法在不单独检查和设置每个 QLineEdits 的情况下执行此操作 我希望我能做类似的事情QLineEdit setReadOnly true 在我的构造函数中
  • 用于查找无效电子邮件地址的 SQL 脚本

    数据导入是从 Access 数据库完成的 并且没有对电子邮件地址字段进行验证 有没有人有一个可以返回无效电子邮件地址列表 缺少 等 的sql脚本 SELECT FROM people WHERE email NOT LIKE 任何更复杂的事
  • Logstash 可以同时处理多个输出吗?

    我对 Logstash 和弹性搜索很陌生 我正在尝试将日志文件存储在elasticsearch 和平面文件中 我知道logstash 支持这两种输出 但它们是同时处理的吗 还是通过工作定期完成 是的 您可以通过使用托运人配置上的 add t
  • 为什么 Java 和 C# 中嵌套类的行为不同?

    我不明白为什么Java中出现以下代码错误 public abstract class TestClass private final int data protected TestClass int data this data data
  • 对于 read_csv 和数据值 NA 来说,这是正确的行为吗?

    我已经开了一个issue https github com pydata pandas issues 10647在 GitHub 以下行为对我来说似乎不正确 似乎如果默认为read csv is na values False那么包括 NA
  • 如何在 Javascript 中通过 标签分割字符串

    我有一个 data text 字符串 它返回如下值 span Name span Message Javascript 是否可以将这个值分成两个 以便我可以在两个不同的变量中获取 名称 和 消息 I tried var str data t
  • JVM进程大小和内存堆大小之间的巨大差异

    我正在 Windows 8 1 64 位 4GB RAM 上开发 java swing 应用程序JDK 版本 8u20 64 位 问题是当我启动应用程序时Netbeans 分析器带监视器选项 当第一个 Jframe 加载时 应用程序内存堆就
  • Neo4j 将数据存储在哪里?

    我是 Neo4j 的新手 正在 Ubuntu 上进行一些测试 我想知道 Neo4j 将数据存储在哪里 他们将创建的节点和关系存储在哪里 这应该有帮助 dpkg L neo4j config etc neo4j neo4j propertie
  • 分割空格避免双引号 JS 字符串:从 'a "b \\" c" d ' 到 ['a','"b \\" c"','d']

    我目前正在为自定义文件格式构建一个小型文本编辑器 我有一个 GUI 但我还实现了一个小型输出控制台 我想要实现的是添加一个非常基本的输入字段来执行一些命令并传递参数 命令如下所示 compile test json output bin l