0

我需要帮助创建正则表达式。以下是两个示例字符串:

/path/to/file.jpg
/path/to/file.type.jpg

分别,我试图捕捉:

file.jpg
file.type.jpg

但我想将这三个捕获为单独的字符串。

file,jpg
file,type,jpg

请注意,我没有捕捉期间。我认为这样的事情可以工作(不包括新行):

([a-z]+)\.
[([a-z]+)[\.]{1}]?
([a-z]{3})

指导将不胜感激。我想知道是否有另一个修改我需要使用它来正确捕获它。

顺便说一句,上面的表达式出错了:(

4

4 回答 4

1

您可以使用:"\/(?:\w+\/)+(\w+)\.?(\w+)?\.(\w+)"作为正则表达式。

编辑:没有读到不匹配的点。

现场演示

于 2012-10-26T22:00:41.167 回答
1

你必须使用: /(\w+)(\.(\w+))?\.(\w+){3,4}\b

然后捕获组 1、3 和 4 将是您的:file(1) type(3) 和 jpg/png whatever(4)

分开的组:

  1. (\w+) - 匹配单词字符 1 个或更多(相当于说:{1, }
  2. (\.(\w+))?- 匹配第 3 组并且前面有一个点,并使整个组可选 ( ?)
  3. (\w+)- 作为 gr 1
  4. (\w{3,4})\b- 匹配 3 或 4 个单词字符 ( {3,4}) 并确保在这些字符之后没有其他字符(单词结尾 - \b- !如果支持!)
于 2012-10-26T22:05:51.087 回答
1

这个正则表达式应该工作:

/(\w+)\.(\w+)(?:\.(\w+))?$/

现场演示

于 2012-10-26T22:19:45.623 回答
1

我建议你使用模式

\/([^.]+)\.?([^.]+|)\.([^.]+)$

您将有 3 个组:文件、类型(如果不存在,则为空)和扩展名

于 2012-10-26T23:11:09.910 回答