在指定字符后使用正则表达式匹配序列

35

初始字符串为[image:salmon-v5-09-14-2011.jpg]

我想捕获文本“salmon-v5-09-14-2011.jpg”,并使用GSkinner的正则表达式工具

最接近我的期望输出的是使用这个正则表达式:

:([\w+.-]+)
问题在于该序列包含了冒号,导致输出结果变成:

:salmon-v5-09-14-2011.jpg

如何在不包括冒号的情况下捕获所需的输出。感谢您的帮助!

3个回答

77

使用向后查找:

(?<=:)[\w+.-]+

回顾先行断言(以 (?<=someregex) 编码)是一种零宽度匹配,它断言但不捕获匹配。

此外,您的正则表达式可能可以简化为:

(?<=:)[^\]]+

该代码简单地获取位于:]之间(但不包括这两个字符)的任何内容。


非常感谢@Bohemian :) 解释也帮了很多,我很感激这个教训。 - ninu
2
在JS中使用 var x="[image:salmon-v5-09-14-2011.jpg]"; x.match(/image:(([\S][^\]])*)/)[1]; 输出 salmon-v5-09-14-2011.jpg - Pranoy Sarkar

6
如果您经常查看格式为此的字符串,则可以使用以下模式:
(?<=\[image:)[^\]]+

这里查找[image:,然后匹配直到关闭标签]


1

你的正则表达式是正确的,只是你使用的工具将整个匹配结果高亮显示,而不仅仅是捕获组。将鼠标悬停在匹配结果上,看看“group 1”实际上是什么。

如果你想要一个稍微强大一点的正则表达式,可以尝试使用:([^\]]+),它允许文件名部分出现除了]之外的任何字符。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接