使用Javascript解析wiki模板调用

时间:2011-03-28 14:32:37

标签: javascript regex parsing wiki

我需要的只是将wiki模板调用拆分为参数部分。在最基本的情况下,它只是按|分割,因此{{template|unnamed_parameter|param1=value1}}将被分为{{templateunnamed_parameterparam1=value1}}。< / p>

但是当管道字符用于wikilinks [[link|title]]等其他目的时,事情变得复杂。

有关如何以最简单的方式完成此任务的任何建议吗? :)

更新:很抱歉可能存在误解,但{{template|unnamed_parameter|param1=value1}}只是一个例子。有关Wiki模板的更多信息,您可以查看以下资源:http://www.mediawiki.org/wiki/Help:Templates

2 个答案:

答案 0 :(得分:0)

请看这个Q&amp; A:How can I fix this wiki link parsing regular expression?

我的回答(在更新部分中)使用perl regex进行非常相似的Wiki链接解析。

更新

好的,这是你的案例的perl正则表达式:

echo "{{template|unnamed_parameter|param1=value1}}" |  \
perl -pe 's#(^|\b)((?![|\[]){{(.+?)\|(.+?)\|(.+?)}}(?![|\]]))($|\b)#{{$3, $4, $5 and }}#g'

Output: {{template, unnamed_parameter, param1=value1 and }}

问:在关闭and之前,您确定需要}},否则只需编辑以上正则表达式:

现在针对字符串[[link|title]]

检查上述解决方案
echo "[[link|title]]" |  \
perl -pe 's#(^|\b)((?![|\[]){{(.+?)\|(.+?)\|(.+?)}}(?![|\]]))($|\b)#{{$3, $4, $5 and }}#g'

Output: [[link|title]] # remains unchanged as per your requirements

答案 1 :(得分:-1)

正则表达式假定您的wiki模板总是有3个部分:
更新以排除与模板{{template|[[link|name]]}}

的错误匹配
regex:       \{\{(.+?)\|[^\[]{2}(.+?)\|(.+?)[^\]]{2\}\}
replacment:  $1,$2,$3
input:       {{template|unnamed_parameter|param1=value1}}
output:      template,unnamed_parameter,param1=value1

这是一个简单的正则表达式,使用不情愿的量词并使用{}|转义\的“特殊”含义 通过将\{\{ \}\}包含在正则表达式中,可以避免[[ ]]模式上的匹配。