Regex 匹配不以开头或结尾的字符串

Regex 匹配不以开头或结尾的字符串,regex,Regex,如果字符串以文件/开头和/或以.js结尾,我如何测试它 示例: test/test2/test.html->true 文件/test2/test.html->false test/test2/test.js->false 文件/test2/test.js->false 到目前为止,我有一个正则表达式:^?!文件\/.*.\。js$ 这适用于文件/但不适用于.js 编辑: 对不起,误会了。仅当字符串不以files/开头且不以.js结尾时,该字符串才应匹配 !/^files\/|\.js$/.tes

如果字符串以文件/开头和/或以.js结尾,我如何测试它

示例:

test/test2/test.html->true 文件/test2/test.html->false test/test2/test.js->false 文件/test2/test.js->false 到目前为止,我有一个正则表达式:^?!文件\/.*.\。js$

这适用于文件/但不适用于.js

编辑:
对不起,误会了。仅当字符串不以files/开头且不以.js结尾时,该字符串才应匹配

!/^files\/|\.js$/.test('files/test2/test.js') -> false
!/^files\/|\.js$/.test('files/test2/test.html') -> false
!/^files\/|\.js$/.test('test/test2/test.js') -> false
!/^files\/|\.js$/.test('test/test2/test.html') -> true
编辑


不用担心,只需颠倒结果即可:

var re = /^files\/.*|.*\.js$/;
alert(!re.test('your-strings'));
你可以使用这个正则表达式

^(files/.*|.*\.js)$
由于您不希望字符串以文件和或js结尾或开头,请使用上面的正则表达式并执行此操作

if(/*regex matches the string*/)
{
//you dont need this string
}
else
{
//you do need this string
}

您的最后一个负片应该是向后看,而不是向前看,在测试时您已经阅读了.js


这里有一个正则表达式,可以满足您的需要

(^(?!files\/)).*((?!\.js).{3}$)

您正在检查最后一个字符前面是否没有.js,这总是正确的。

实际上是ColdFusion,据我所知,它使用的是Java正则表达式。编辑:Ups,对不起,我需要它用于IIS URL重写模块。您使用的是负面的lookaheads,它可以确保您的结果不包含任何一个。人们已经花时间帮助您:如果其他答案也有用,请向上投票。@RoManiac帮助他们,但没有得到任何回报,就好像他们在付钱给我们一样。类似JavaScript的味道,Ruby和Tcl根本不支持lookback,尽管它们确实支持lookahead。您可能很幸运,IIS URL重写模块随Perl 5 compat/ECMAScript一起提供。很抱歉误解您。只有当字符串不以files/开头且不以.js结尾时,该字符串才应该匹配。@android只需颠倒结果。很抱歉误解了。仅当字符串不以files/开头且不以.js结尾时,字符串才应匹配。不用担心,只需反转结果:var re=/^files\/.*js$/;警觉的重新测试“你的字符串”;如果这有用的话,请投赞成票…抱歉误解了。仅当字符串不以files/开头且不以.js结尾时,字符串才应匹配。@android仍然正则表达式有效。.检查它是否与上面的正则表达式匹配,以及它是否与您需要的字符串不匹配。我不确定IIS URL重写模块是否可以这样做,因为它只是一个XML文件。。。我来检查一下。啊,更好。我的只是一个黑客补丁。如果出于某种原因,文件名是xxyes,那会是一个问题,尽管它不可能在问题的范围内。
^(?!files\/).*(?<!\.js)$
(^(?!files\/)).*((?!\.js).{3}$)