首页 > 解决方案 > 具有多个返回对象的复杂正则表达式可选搜索

问题描述

我试图让以下内容在某些条件下进行搜索。总会有给定的文件名,其他是可选的。

[[File:HumanMaleDiagram.png|right|300px|thumb|A diagram of a male human.]]

第二项可以是 [left, right, center] 或可选,大小可选(px 或 %),thumb 可选,末尾的 alt 文本可选。

我用过:

var imageFinder = /\|\s*\[\[File\:([\w\-\_\. ]+)\|*(?=[right|left|center]*)\|*(?=[\w]*px)\|*(?=[thumb]*)\|*(?=[\w\.\s]*)\]\]/gi

退回 $1...$5

所以我在管道上使用了前瞻的“?=”和“*”,但没有找到它。

仅在过去几天愤怒地使用正则表达式。我所有其他人都在工作(他们比这小),但我们将不胜感激地获得一些帮助。

在 JavaScript 中执行此操作。

感谢任何可以提供帮助的人。

标签: javascriptregexregex-lookaroundsregexp-replace

解决方案


您可以使每个部分都是可选的,因此您不需要使用前瞻。

我建议使用命名的捕获组(但这不是必需的)。

\[\[File:[^|]+(?:\|(?<align>left|right|center))?(?:\|(?<size>\d+(?:px|%)))?(?:\|(?<thumb>thumb))?(?:\|(?<alt>[^|]+))?\]\]

在 regex101 上看到这个


推荐阅读