我只是没有让我的正则表达式正确:
我有以下模板:
<!-- Defines the template for the tabs. -->
{{TMPL:Import=../../../../Data/Templates/Ribbon/tabs.tmpl; Name=Tabs}}
<div class="tabs">
<ul role="tablist">
{{BOS:Sequence}}
<li role="tab" class="{{TabType}}" id="{{tabId}}">
<span>{{TabFile}}</span>
</li>
{{EOS:Sequence}}
</ul>
</div>
{{Render:Tabs}}
除了以{{}}
,{{BOS
,{{EOS
,{{TMPL
{{Render
之间的所有内容
以下是几种方法:
尝试1:
({{).*(}})
这会选择{{ }}
代码之间的所有内容,但这并不好。
尝试2:
({{)[^TMPL][^BOS][^EOS][^Render].*(}})
这将使{{TabType}}
和{{TabFile}}
不再被选中,我只是不知道为什么。
使用其他一些正则表达式,我得到{{TabType}}" id="{{tabId}}
被选为一个匹配。
有没有人知道如何解决这个问题,我真的需要一个正则表达式大师: - )
答案 0 :(得分:2)
答案 1 :(得分:1)
您必须使用以下正则表达式来获取大括号之间的内容:
\{\{(.*?)\}\}
<强> Working Demo 强>
如果您要从发布的评论中排除内容,可以使用正则表达式技术排除您不想要的内容,并在正则表达式结束时保留您想要的内容:
\{\{BOS:Sequence\}\}|\{\{EOS:Sequence\}\}|\{\{TMPL:Import.*?\}\}|\{\{Render:Tabs\}\}|\{\{(.*?)\}\}
<强> Working demo 强>
顺便说一句,如果您想拥有上述正则表达式的快捷方式,可以使用:
\{\{(?:BOS|EOS):Sequence\}\}|\{\{TMPL:Import.*?\}\}|\{\{Render:Tabs\}\}|\{\{(.*?)\}\}
这是一种非常有用的模式排除技术,我很高兴从Anubhava和zx81(他们使用正则表达式模式)中学习它。对于这种正则表达式技术,您可以使用捕获组找到所需的内容(请查看下面屏幕截图中的绿色突出显示):
答案 2 :(得分:0)
使用[^TMPL]
之类的功能无法正常工作,因为这些是类。你可以使用负向前瞻(或者甚至是后视,取决于你正在使用的正则表达式库)。
\{\{(?!BOS:)(?!EOS:)(?!Render:)(?!TMPL:)(.*?)\}\}
我仍然觉得您希望BOS
,EOS
等只是模板中的字符串{{
,并且要插入其他值。如果您使用的是把手或其他东西,可以插入字符串:
{{'{{BOS:Sequence}}'}}