正则表达式以避免匹配起始标记

时间:2014-03-27 14:15:40

标签: javascript html regex

我的意图是我需要匹配标记内部有HTML方括号标记的freemarker个标记。

示例:

<img src="[#if]logo.jpg[#else]logosmall.jpg[/#if]" />

<a href="[#if]logo.jpg[#else]logosmall.jpg[/#if]">See logo</a>

到目前为止,我有这个正则表达式(<)([a-z][a-z0-9]*)[\s\S]+(\[\#[a-z][\s\S]*\])[\s\S]+([^>]+?\/>|>(.*?)(<\/\2>)),你可以在下面的链接上测试一个很好的例子

http://regex101.com/r/iZ7qQ5

正如您所看到的,它“相当”正常,但它在开头匹配了一些额外的标记htmlbody

我想在具有否定前瞻((?![<][a-z][a-z0-9]*))的freemarker标记之前否定任何其他开始标记的发现,但它不起作用。

1 个答案:

答案 0 :(得分:2)

您的问题出在[\s\S]+部分。此部分相当于匹配所有内容,因为\S表示 \s的所有内容...在此模式下,可以捕获所有标记,以及自由文本等。

我不确定这个正则表达式正是你所需要的,但它应该让你朝着正确的方向前进:

(<)([a-z][a-z0-9]*)[^>]+(\[\#[a-z][^\]]*\])[^>]+([^>]+?\/>|>(.*?)(<\/\2>))