使用Javascript解析wiki模板调用
我只需要将wiki模板调用拆分为参数部分。在非常基本的场景中,它只是通过使用Javascript解析wiki模板调用,javascript,regex,parsing,wiki,Javascript,Regex,Parsing,Wiki,我只需要将wiki模板调用拆分为参数部分。在非常基本的场景中,它只是通过进行拆分,因此{template | unnamed_parameter | param1=value1}将拆分为{template,unnamed_parameter,param1=value1和} 但是,当管道字符用于其他目的时,事情就变得复杂了,比如用于wikilinks[[link | title]]等 如何以最简单的方式完成此任务,有什么建议吗?:) 更新:很抱歉可能会产生误解,但{{template | unna
进行拆分,因此{template | unnamed_parameter | param1=value1}
将拆分为{template
,unnamed_parameter
,param1=value1
和}
但是,当管道字符用于其他目的时,事情就变得复杂了,比如用于wikilinks[[link | title]]
等
如何以最简单的方式完成此任务,有什么建议吗?:)
更新:很抱歉可能会产生误解,但
{{template | unnamed_parameter | param1=value1}}
只是一个例子。有关wiki模板的更多信息,请参阅以下资源:假定wiki模板始终包含3个部分的正则表达式:更新以排除与模板的错误匹配
{{template}[[link}name]]}
正则表达式:\{(+.+?)\\[^\[{2}(+?)\\\\.(.+?)[^\]{2}
重播费:1美元,2美元,3美元
输入:{template | unnamed_参数| param1=value1}
输出:模板,未命名的_参数,param1=value1
这是一个简单的正则表达式,使用不情愿的量词,并使用\
逃避
{}}
的“特殊”含义
通过将\{\}
包含到正则表达式中,您可以避免匹配[[]]
模式。请查看以下问答:
我的答案(在更新部分)是使用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 }}
Q:在关闭}之前,您确定需要和
此处
吗否则只需编辑上面的正则表达式即可:
现在根据字符串检查上述解决方案[[link | title]]
echo "[[link|title]]" | \
perl -pe 's#(^|\b)((?![|\[]){{(.+?)\|(.+?)\|(.+?)}}(?![|\]]))($|\b)#{{$3, $4, $5 and }}#g'
Output: [[link|title]] # remains unchanged as per your requirements
您的正则表达式即使在{template}[[link}更改为
{(+?)\[^\[{2}(+?)\\\\{2}(.+?)[^\]]{2\}
时也会失败,这将排除{template}[[link}name]}}
@DixonD:您是否可以从链接的页面中提取各种模板调用,并在原始问题中列出它们。
echo "[[link|title]]" | \
perl -pe 's#(^|\b)((?![|\[]){{(.+?)\|(.+?)\|(.+?)}}(?![|\]]))($|\b)#{{$3, $4, $5 and }}#g'
Output: [[link|title]] # remains unchanged as per your requirements