单引号和双引号的正则表达式

Regexp in the Case of Single and Double Quotes

我有以下 JavaScript:

let strTest = `
  "The issue": "L'oggetto ",
  "issue": "oggetto",
  "issue": 'oggetto "novo" ',
  `;

我正在尝试对上述字符串进行标记化。

我的正则表达式尝试:

let regExp = /["'](.*?)["']\s*?:\s*?['"](.*?)["']/gm;

这很好用,除非我在双引号 (") 内有一对单引号 ('),反之亦然。

只用一个正则表达式可以吗?

您可以使用反向引用:

/(["'])(.*?)\s*?:\s*?(['"])(.*?)/gm

这将在标记化的字符串中包含引号,但您随后可以通过仅采用偶数标记将它们从生成的匹配项中删除。

编辑: 正如@TJ Crowder 指出的那样,如果字符串在字符串中包含 \" 形式的转义引号,这将无法正常工作。为了完全容纳那些转义的引号并且不中断像 \"(引号前的转义反斜杠)这样的字符串,您将需要使用多个正则表达式进行解析或采取不同的策略

如果这是来自 JSON,您可能想要查看的另一件事是忽略正则表达式,而只是遍历 json 对象的属性。这取决于您获取的字符串是否有效 json。

我自己回答,我想我有一个更小的正则表达式:

` /["'](.*)["']\s*?:\s*?["'[](.*)["']]/g ` 

看看regex101.com/r/g9WCbi/1