求一个正则表达式实现这个匹配

发布于 2022-09-12 13:51:50 字数 570 浏览 15 评论 0

字符串格式:
"[name]张三丰:[uuid]...;[name]金毛狮王:[uuid]....;[name]赵四:[uuid]...;[name]..."
这个字符串由M段数据组成,每段数据以;(冒号)隔开,我需要匹配每段数据内的[name]到:[uuid]之间的内容如果第一段数据匹配成功则完成,否则匹配所有数据
我尝试过这样写\[name\].*匹配的字符串.*\:\[uuid\]
例如:\[name\].*三.*\:\[uuid\] -> 匹配张三丰

我写的这段正则表达式是错的,因为:

如果数据是这样的"[name]哈士奇:[uuid]...;[name]金毛:[uuid]张三丰....
那么就会匹配到[uuid]后面的数值,这不是我想要的,我只想匹配每个[name]到之后遇到的第一个:[uuid]之间的内容;。
因为一些原因不能切字符串,只能用正则完成,以上,求助!!!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

var reg = /(?<=\[name\])([^:]+)/g
str.match(reg)
不是很明白你的意思
何处潇湘 2022-09-19 13:51:50

参考上面的回答,用了两个零宽断言,中间是贪婪匹配。(上面那个会匹配...)

let str = "[name]张三丰:[uuid]...;[name]金毛狮王:[uuid]....;[name]赵四:[uuid]...;[name]..."
var reg = /(?<=\[name\])(.+)(?=:\[uuid\]\.{3,4})/g
str.match(reg)

image.png


突然发现代码和图片不匹配。中间不是贪婪匹配,应该是懒惰匹配。

let str = "[name]张三丰:[uuid]...;[name]金毛狮王:[uuid]....;[name]赵四:[uuid]...;[name]..."
let reg = /(?<=\[name\])(.+?)(?=:\[uuid\].*)/g
str.match(reg)
天荒地未老 2022-09-19 13:51:50

\[name\](.*?)\[uuid\] 用非贪婪匹配

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文