gpt4 book ai didi

JavaScript 全局正则表达式

转载 作者:行者123 更新时间:2023-11-28 01:36:25 24 4
gpt4 key购买 nike

我正在尝试使用 javascript 使正则表达式正常工作。它应该匹配以下格式,我想在以下字符串中全局找到它:

[[foo=bar:something]] 

foobarsomething 可以是任何字母数字字符。

我尝试的表达式如下(大量 \s* 用于匹配具有无意空格的部分):

var string = "something [[abc=foo:bar]] some other stuff [[foo=bar:abc]] else";
var regex = new RegExp("\\[\\[\s*.+\s*=\s*.+\s*:\s*.+\s*\\]\\]", "g");
console.log(string.match(regex));

这给了我:

[  "[[abc=foo:bar]] some other stuff [[foo=bar:abc]]"  ]

作为单场比赛。

我的问题是,我怎样才能只匹配这个模式,而不仅仅是第一个和最后一个 [[]] 之间的内容,并得到这个结果:

[  "[[abc=foo:bar]]", "[[foo=bar:abc]]"  ]

最佳答案

就目前情况而言,这里正在进行大量无关的匹配。所有 \s* 都可以删除,因为其中已经有 .+

这在功能上与您当前拥有的相同,主要是因为您现在没有捕获任何匹配:

var string = "something [[abc=foo:bar]] some other stuff [[foo=bar:abc]] else";
var regex = new RegExp("\\[\\[.+=.+:.+\\]\\]", "g");
console.log(string.match(regex));

您的问题要求的是您的正则表达式“非贪婪”或“惰性”,这意味着您希望它每次都在第一个匹配处停止。看看this questionthis tutorial以获得更多帮助。

tl;dr 是您应该将通配符更改为 .+?

var string = "something [[abc=foo:bar]] some other stuff [[foo=bar:abc]] else";
var regex = /\[\[.+?=.+?:.+?\]\]/g
console.log(string.match(regex));

关于JavaScript 全局正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21489198/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com