带扩展名的字符串和不带扩展名的字符串(Regex)

带扩展名的字符串和不带扩展名的字符串(Regex),regex,string,Regex,String,我想查找没有扩展名的字符串,例如,如果我有: mynameisjeff.jpeg mynameisjohn.notanextension mynameisbob 在这组字符串中,中间和底部是我想要的字符串,而顶部是我想要忽略的字符串 这是我目前使用的正则表达式: (.+)[^\.]+ 它产生以下结果,它似乎忽略了not括号,因此它与 mynameisjeff.jpeg 这是我试图避免的字符串。这匹配没有扩展名的任何内容:/^[^.]+$/ 这将匹配任何看起来像扩展名的内容:/^([^.]+

我想查找没有扩展名的字符串,例如,如果我有:

mynameisjeff.jpeg
mynameisjohn.notanextension
mynameisbob
在这组字符串中,中间和底部是我想要的字符串,而顶部是我想要忽略的字符串

这是我目前使用的正则表达式:

(.+)[^\.]+
它产生以下结果,它似乎忽略了not括号,因此它与

mynameisjeff.jpeg

这是我试图避免的字符串。

这匹配没有扩展名的任何内容:
/^[^.]+$/


这将匹配任何看起来像扩展名的内容:
/^([^.]+)\.(.+)/
,并将文件名放在第一组,将扩展名放在第二组。您需要一个可搜索的扩展数组,需要对其进行测试

如果你真的需要的话,有一种方法可以在一个正则表达式中完成,但是如果你有很多扩展的话,它会变得很长很难看

这可能会让你半途而废:

if (/^[^.]+$/.test(filename)) {
    alert(filename+" has no extension");
} else {
    var regex = /^([^.]+)\.(.+)/;
    var matches = regex.exec(filename);
    alert("The file part is "+matches[1]);
    alert("The extension is "+matches[2]);
}
更重要的是:

function contains(a, obj) {
    for (var i = 0; i < a.length; i++) {
        if (a[i] === obj) {
            return true;
        }
    }
    return false;
}

// testFilename returns true if filename does not match a known file type (i.e. has a recognized extension)
function testFilename(filename) {
    var extensions = [ "txt", "html", "foo", "bar" ];

    var foo = false;
    if (/^[^.]+$/.test(filename)) {
        foo = true;
    } else {
        var regex = /^([^.]+)\.(.+)/;
        var matches = regex.exec(filename);
        if (!contains(extensions, matches[2].toLowerCase())) {
            foo = true;
        }
    }
    return foo;
}
函数包含(a,obj){
对于(变量i=0;i
它可以由一个正则表达式通过使用负前瞻来完成:

^(?!.*\.(jpeg|jpg|ext|you|want|to|exclude)$)
(使用python进行测试)

这将把最后一个期间之前的部分视为“文件部分”,最后一个期间之后的部分视为“扩展名”。文件部分位于组1中,而扩展名位于组2中

例如(用Python进行测试)


我试过了,但我发现问题是,当我调用方法组(0)时,它会匹配,但方法组(1)会给我一个奇怪的东西:你需要提到你想要的组:我不太明白你所说的组是什么意思,但听起来像是我想要的!我怎样才能得到这些团体呢?:)更新:我想我理解你的意思,但我实际上是在寻找没有扩展名的文件,所以字符串中间和底部没有扩展名,我想在跳过字符串1时找到它更新2:所以没有/^[^.]+$/表达式可以放入组?array.prototype.contains()的实现这只是一个练习:看起来很吓人!不管怎样,谢谢你的帮助,我仍然无法访问rep:(计算机如何知道什么字符串是“扩展名”?你要自己维护扩展名吗?
>>> re.match(r'^(?!.*\.(jpeg|jpg)$)', "foo")
<_sre.SRE_Match object at 0x02216FA0>
(with Match object returned means it matches)

>>> re.match(r'^(?!.*\.(jpeg|jpg)$)', "foo.bar")
<_sre.SRE_Match object at 0x02224060>
(with Match object returned means it matches)

>>> re.match(r'^(?!.*\.(jpeg|jpg)$)', "foo.jpeg.bar")
<_sre.SRE_Match object at 0x02216FA0>
(with Match object returned means it matches)

>>> re.match(r'^(?!.*\.(jpeg|jpg)$)', "foo.jpeg")
>>>
(No Match object returned means it does not match)
^(.*?)(?:\.([^.]*))?$
>>> re.match(r"^(.*?)(?:\.([^.]*))?$", "foo.asdfa.bar").groups()
('foo.asdfa', 'bar')

>>> re.match(r"^(.*?)(?:\.([^.]*))?$", "foo.asdfa.").groups()
('foo.asdfa', '')

>>> re.match(r"^(.*?)(?:\.([^.]*))?$", "foo").groups()
('foo', None)