此问题在此处已有答案:
Regular expression to stop at first match(9个答案)
17天前关闭。
我有这样一段代码:
{
a: {
b: 1,
c: 2,
},
d: {
e: 4,
f: 5,
},
}
字符串
我需要一个正则表达式分别匹配两个对象a和d。
第一场比赛:
a: {
b: 1,
c: 2,
},
型
第二场:
d: {
e: 4,
f: 5,
},
型
我试过这个:
.+: \{
([\s\S\r]+)
\},
型
但它贪婪地将两个对象作为一个匹配项进行匹配。
如何使表达式变得懒惰?
我试着在几个地方放置懒惰的操作符?
。但没有成功。
我在Visual Studio代码中使用文本搜索。
2条答案
按热度按时间kpbpu0081#
谢谢你,马尚费茨。你的回答让我想到了解决方案:
字符串
我在
+
之后的第二行添加了?
。它在Visual Studio Code中运行。nhjlsmyf2#
在您提供的正则表达式中,与您的代码示例相比,似乎有一些不匹配的组件。在您的代码示例中,没有“catalog_ids”属性。让我们修改正则表达式以符合您的代码示例。
为了使正则表达式不贪婪(或懒惰),需要在正确的位置使用
?
字符。要捕获您提到的JavaScript对象,您应该将?
字符放置在组中+
的后面,如(.+?)
。这意味着“匹配任何字符一次或多次,但尽可能少”。下面是一个应该可以工作的正则表达式:
字符串
说明:
(\w+)
-匹配任何单词字符(等于[a-zA-Z0-9_]
):\s+\{
-匹配:
,然后匹配任何空白字符\s+
,然后匹配{
[\s\S]*?
-匹配任何字符(包括换行符),但由于?
\},
-匹配},
请记住,正则表达式不一定是解析JSON等嵌套结构的最佳工具。根据您使用的语言,您可能需要考虑使用JSON解析器或类似工具。
当您使用VS Code时,如果您确保在搜索面板中选中了“使用正则表达式”和“大小写匹配”选项,则该正则表达式应该可以正常工作。还请记住,VS Code的搜索栏中的正则表达式不需要围绕
/
分隔符。