Javascript 防止正则表达式在使用可选令牌时变得贪婪?

Javascript 防止正则表达式在使用可选令牌时变得贪婪?,javascript,regex,Javascript,Regex,我试图使用正则表达式从不同的字符串中提取信息 例如,我有以下JSON: { "id": 1, "title": "test", // comment "cost": "$10", } 并希望编写一个正则表达式,将文本提取到捕获组中(1)冒号之前的文本,(2)逗号之前的文本,(3)如果存在逗号,以及(4)逗号之后的文本 从逗号是非可选的开始,我提出了(.*):(.*)(,)(.*)\n 这是正确的

我试图使用正则表达式从不同的字符串中提取信息

例如,我有以下JSON:

{
"id": 1,
"title": "test", // comment
"cost": "$10",
}
并希望编写一个正则表达式,将文本提取到捕获组中(1)冒号之前的文本,(2)逗号之前的文本,(3)如果存在逗号,以及(4)逗号之后的文本

从逗号是非可选的开始,我提出了
(.*):(.*)(,)(.*)\n

这是正确的。但是,我现在尝试通过添加
(.*):(.*)(.*)(,?)(.*)来修改它,使逗号是可选的\n
。这就发生了故障,通常应在捕获组2和3中的内容将转移到组4


如何修改我的正则表达式以防止这种情况发生?如果存在逗号,我希望修改后的版本与原始非可选版本的功能相同,如果不存在逗号,请将冒号后面的所有文本移到第2组。

让第二组捕获任何不是逗号或换行符的内容:

(.*):([^,\n\r]*)(,?)(.*)\n


请注意,正则表达式要求行以
\n
结尾。这可能过于严格,因为文本的最后一行可能不会以
\n
结尾。还有一些文本使用
\r
\r\n
作为换行符。您可能希望使用
$
锚定,它实际上也不会捕获换行符,只是需要它。与
m
(多行)修饰符一起使用。

如果要解析JSON,只需调用
JSON.parse
。感谢您的建议!然而,我正试图使这项工作适用于更一般的情况,在这种情况下,我希望任何字符串和任何标记都是“可选的”,使第二组像
([^,\n\r]*)
——这样它将贪婪地捕获任何不是逗号或换行符的内容。
((?:(!XXX)[^\r\n])(((?:XXX)
@trincot啊,非常感谢!