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

新手上路,请多包涵

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

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

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

阅读 1.7k
3 个回答
var reg = /(?<=\[name\])([^:]+)/g
str.match(reg)
不是很明白你的意思

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

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)

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进