2011-03-28 61 views
1

我需要的只是將維基模板調用分解成參數部分。在非常基本的情況下,它只是分裂|因此{{template|unnamed_parameter|param1=value1}}將被拆分爲{{template,unnamed_parameter,param1=value1}}用Javascript解析維基模板調用

但事情當管道字符被用於其他用途等複雜的wikilinks [[link|title]]

任何建議如何做最簡單的方法這個任務? :)

更新:對不起,可能會誤解,但{{template|unnamed_parameter|param1=value1}}只是一個例子。有關維基模板的更多信息,你可以看看下面的資源:http://www.mediawiki.org/wiki/Help:Templates

回答

-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 

它一個簡單的正則表達式使用不情願的量詞和逃避{}|使用\
通過包括\{\{ \}\}到您避免的正則表達式匹配[[ ]] p attern。

+0

即使{{template | [[link | name]]}} – DixonD 2011-03-28 15:32:15

+0

更改爲'\ {\ {(。+?)\ | [^ \ [] {2}(。+?)\ |(。+?)[^ \]] {2 \} \}'將排除匹配{{template | [[link | name]]}}' – 2011-03-28 18:39:59

0

請看看這個問答&答:How can I fix this wiki link parsing regular expression?

我的回答(在更新部分)存在使用perl regex做得非常類似維基鏈接解析。

更新:

好吧,這裏是你的情況的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 
+0

對不起,請參閱我對該問題的更新。 – DixonD 2011-03-29 13:41:20

+0

@DixonD:是否可以從您鏈接的頁面中提取各種模板調用,並在您的原始問題中列出它們。 – anubhava 2011-03-29 13:48:02