我从this RegExp开始:
/<!--#\s*include\s+file=(['"])([^\r\n]+?)\1\s*-->/g
我希望它能匹配这两行:
<!--#include file="../header.html"-->
<!--#include virtual="../header.html"-->
在我的第一次尝试中,我将file
改为(file|virtual)
,如此:
/<!--#\s*include\s+(file|virtual)=(['"])([^\r\n]+?)\1\s*-->/g
但是,这与任何事都不相符。经过一番玩耍后,我发现在所有内容中添加括号将得到一个匹配:
/(<!--#\s*include\s+(file|virtual)=(['"])([^\r\n]+?)\1\s*-->)/g
我不明白为什么 - 为什么没有第一次修改匹配,为什么额外的括号修复它?
答案 0 :(得分:1)
我想通了 - 它是靠近结尾的\1
后退参考 - 它应该与开头(['"])
匹配,最后用相同的引号。但是当我添加一个额外的捕获组时,它正在文件路径的末尾寻找第二个(file|virtual)
。
修复方法是将其更改为\2
。
这是更正的RegExp:
/<!--#\s*include\s+(file|virtual)=(['"])([^\r\n]+?)\2\s*-->/g