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

时间:2017-06-12 12:31:48

标签: javascript regex tokenize

我有以下JavaScript:

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

我正在尝试像上面那样标记字符串。

我的正则表达式尝试:

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

这样可以正常工作,除非我在双引号(“)中有一对单引号('),反之亦然。

只有一个正则表达式可以实现吗?

2 个答案:

答案 0 :(得分:0)

我回答自己,我认为我带来了一个较小的正则表达式:

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

查看regex101.com/r/g9WCbi/1

答案 1 :(得分:-2)

您可以使用反向引用:

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

这将在标记化字符串中包含引号,但您可以通过仅使用偶数编号的标记将其从生成的匹配中删除。

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

您可能想要查看的另一件事,如果这是来自JSON,则忽略正则表达式,只是迭代json对象的属性。这取决于你得到的字符串是否作为有效的json进入。