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