Javascript 正则表达式早期部分的负匹配

Javascript 正则表达式早期部分的负匹配,javascript,regex,Javascript,Regex,我正在尝试编写与文件名匹配的正则表达式,例如: image.png image.svg image.gif 但是,如果我的扩展名前面有.inline,我不希望它匹配,例如: image.inline.png image.inline.svg image.inline.gif 我当前的正则表达式与前三个匹配,如下所示:/\(gif | png | svg)$/-但是,我无法为前面的.inline添加否定条件 提前感谢您的建议。您可以使用负前瞻来检查前面的.inline。看到它在行动 您可以使用

我正在尝试编写与文件名匹配的正则表达式,例如:

image.png
image.svg
image.gif
但是,如果我的扩展名前面有
.inline
,我不希望它匹配,例如:

image.inline.png
image.inline.svg
image.inline.gif
我当前的正则表达式与前三个匹配,如下所示:
/\(gif | png | svg)$/
-但是,我无法为前面的
.inline
添加否定条件


提前感谢您的建议。

您可以使用负前瞻来检查前面的
.inline
。看到它在行动


您可以使用负前瞻来检查前面的
.inline
。看到它在行动


我也会使用消极前瞻,但我会用稍微不同的措辞:

var term=“image.inline.png”;
var re=new RegExp(“^(?。.*\.inline\.[^.]+$).\\.(?:gif | png | svg)$”;
if(重新测试(术语)){
控制台日志(“有效”);
}否则{
控制台日志(“无效”);

}
我也会使用消极前瞻,但我会用稍微不同的措辞:

var term=“image.inline.png”;
var re=new RegExp(“^(?。.*\.inline\.[^.]+$).\\.(?:gif | png | svg)$”;
if(重新测试(术语)){
控制台日志(“有效”);
}否则{
控制台日志(“无效”);

}
我是通过查看有关堆栈溢出的其他问题得出这一结论的;但是,问题是我不想指定在
.inline.svg
部分之前可以键入哪些字符;换句话说,除了字符串是否以
.inline.svg
结尾外,我不想关心任何事情,而您上面的正则表达式对该段之前的内容进行了假设。在这种情况下,通常我会建议使用负回溯,但不幸的是,JavaScript的正则表达式引擎不支持它们。蒂姆的答案可能对你更有效。这是一个完全错误的解决方案<代码>(?!\.inline)限制了
\(gif | png | svg)
模式,因此始终是真实的且完全冗余的。因此,它没有回答当前的问题。请考虑修复或删除,因为前面的操作在这里被滥用,可能会使其他人困惑。我从堆栈溢出的其他问题中获得了这一点;但是,问题是我不想指定在
.inline.svg
部分之前可以键入哪些字符;换句话说,除了字符串是否以
.inline.svg
结尾外,我不想关心任何事情,而您上面的正则表达式对该段之前的内容进行了假设。在这种情况下,通常我会建议使用负回溯,但不幸的是,JavaScript的正则表达式引擎不支持它们。蒂姆的答案可能对你更有效。这是一个完全错误的解决方案<代码>(?!\.inline)限制了
\(gif | png | svg)
模式,因此始终是真实的且完全冗余的。因此,它没有回答当前的问题。请考虑修复或删除,因为前面的用法在这里被滥用,可能会迷惑其他人。@ Timk123当前的代码> new ReGEXP(“^(.*..nLy.[^)+$)**((::GIF)PNG SVG))解决方案有一些问题。您需要使用正则表达式文本,
var re=/^(?。*\.inline\.[^.]+$).*\(?:gif | png | svg)$/(没有引号,没有
新的RegExp
)。是的,并在末尾添加
$
,以确保您只匹配字符串末尾的扩展名。@WiktorStribiżew也许,但是我在网页包中使用上述内容时没有任何问题:)谢谢您提供的信息@think123您只是没有意识到
匹配任何字符,这就是为什么您“没有问题”。当前解决方案匹配扩展名为
mpng
的文件。因为你需要匹配一个点,所以你需要避开它。如果您计划使用构造函数表示法,请使用双反斜杠,
var re=new RegExp(“^(?。.*\.inline\\.[^.]+$).\\.(?:gif | png | svg)$”。尽管如此,它还是比正则表达式更丑陋。@think123当前的
新正则表达式(“^(?。.*\.inline\.[^.]+$).*\(?:gif | png | svg)”)
解决方案存在一些问题。您需要使用正则表达式文本,
var re=/^(?。*\.inline\.[^.]+$).*\(?:gif | png | svg)$/(没有引号,没有
新的RegExp
)。是的,并在末尾添加
$
,以确保您只匹配字符串末尾的扩展名。@WiktorStribiżew也许,但是我在网页包中使用上述内容时没有任何问题:)谢谢您提供的信息@think123您只是没有意识到
匹配任何字符,这就是为什么您“没有问题”。当前解决方案匹配扩展名为
mpng
的文件。因为你需要匹配一个点,所以你需要避开它。如果您计划使用构造函数表示法,请使用双反斜杠,
var re=new RegExp(“^(?。.*\.inline\\.[^.]+$).\\.(?:gif | png | svg)$”。不过,它比正则表达式文字更难看。
^\w+(?!\.inline)\.(gif|png|svg)$