正则表达式:将所有[[??]]替换为{{param | ??}}

时间:2015-08-28 11:26:24

标签: regex

我希望有一些正则表达式的大师帮我解决这个问题:

我有[[AB]][[ABC]][[BEC]]等字符串,我想用字符串{{param|AB}}{{param|ABC}}和{{1}替换它们分别。

所有源字符串都在[[]]内,并且有2或3个大写字母。我们的想法是将括号内的字母转换为新格式。如果我需要两个不同的正则表达式来处理2个和3个字母长的情况,那就没问题了。

(如果好奇,这是用于在基于Mediawiki的页面中用模板替换大量链接。)

提前致谢!

2 个答案:

答案 0 :(得分:3)

您可以替换以下正则表达式的结果:

/\[\[([A-Z]{2,3})\]\]/

with:

{{/param\|\1/}} 

并非某些正则表达式引擎会将$用于捕获组,因此您可能需要使用{{/param\|$1/}}

如果您想要排除某些字词,可以使用负面预测:

/^\[\[((?!AAA|BBB|CCC)[A-Z]{2,3})]]$/gm

但请注意,由于前面的正则表达式使用锚点,如果要处理多行字符串,则需要使用m标志(多行标记)。

请参阅演示https://regex101.com/r/cR8zG6/1

答案 1 :(得分:2)

您可以使用此正则表达式进行搜索:

\[\[(\w+)\]\]

并替换使用:

{{param|$1}}

RegEx Demo