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

Binn Louis Zeng
  • 1
新手上路,请多包涵

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

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

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

回复
阅读 660
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\] 用非贪婪匹配

宣传栏