Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Javascript解析wiki模板调用_Javascript_Regex_Parsing_Wiki - Fatal编程技术网

使用Javascript解析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

我只需要将wiki模板调用拆分为参数部分。在非常基本的场景中,它只是通过
进行拆分,因此
{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