【问题标题】:Parsing wiki templates calls with Javascript使用 Javascript 解析 wiki 模板调用
【发布时间】:2011-07-24 13:09:18
【问题描述】:

我所需要的只是将 wiki 模板调用拆分为参数部分。在非常基本的场景中,它只是被| 拆分,所以{{template|unnamed_parameter|param1=value1}} 将拆分为{{templateunnamed_parameterparam1=value1}}

但是当竖线字符用于其他用途时,例如维基链接[[link|title]] 等,事情就变得复杂了。

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

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

【问题讨论】:

    标签: javascript regex parsing wiki


    【解决方案1】:

    假定您的 wiki 模板始终包含 3 个部分的正则表达式:
    更新以排除与模板的错误匹配 {{template|[[link|name]]}}

    正则表达式:\{\{(.+?)\|[^\[]{2}(.+?)\|(.+?)[^\]]{2\}\} 更换:$1,$2,$3 输入:{{template|unnamed_pa​​rameter|param1=value1}} 输出:模板,未命名参数,param1=value1

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

    【讨论】:

    • 即使对于 {{template|[[link|name]]}},您的正则表达式也会失败
    • 更改为 \{\{(.+?)\|[^\[]{2}(.+?)\|(.+?)[^\]]{2\}\} 将排除 {{template|[[link|name]]}} 的匹配项
    【解决方案2】:

    请看这个问答: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
    

    【讨论】:

    • @DixonD:您是否可以从您链接的页面中提取各种模板调用并在此处列出您的原始问题。
    猜你喜欢
    • 2023-03-11
    • 2018-09-30
    • 2011-03-21
    • 1970-01-01
    • 2013-08-15
    • 2014-07-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多