正则表达式任何不以.js结尾的字符串

时间:2014-10-15 14:10:47

标签: regex perl

这让我疯了。我正在尝试匹配.js中未结束的所有内容。我正在使用perl,因此?<!等非常受欢迎。

我正在尝试做什么:

匹配这些

mainfile
jquery.1.1.11
my.module

匹配这些

mainfile.js
jquery.1.1.11.js
my.module.js

这应该是一个非常简单的任务,但我只是卡住了。我查看了regexsedperl的文档,甚至在regexr上摆弄了半个小时。直觉上,this example/^.*?(?!\.js)$/)应该这样做。我猜我只是瞎了眼。

提前致谢。

3 个答案:

答案 0 :(得分:9)

您可以使用此正则表达式确保您的匹配不会以.js结尾:

^(.(?!\.js$))+$

RegEx Demo

答案 1 :(得分:1)

当您只有负匹配条件时,最简单的方法是构造正正则表达式,然后检查它是否匹配。

if ($string !~ /\.js$/)
{
   print "Doesn't end in .js";
}

这比负面的环顾更容易理解和更有效。

只有当您需要混合正面和负面条件时才需要环顾四周(例如,&#34;我需要匹配&#34; foo&#34;在一个字符串中,但仅在不遵循时by&#34; bar&#34;)。即便如此,有时候使用多个简单的模式和逻辑会更容易,而不是用一个复杂的模式满足所有需求。

答案 2 :(得分:0)

这个应该符合您的需求:

^.*(?<![.]js)$