单引号和双引号的正则表达式
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 `
我有以下 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 `