2012-02-21 88 views
1

档案名称,我使用这样的:测试用正则表达式和javascript

if (data.match(/([^\/\\]+)\.(txt|doc)$/i)) 
    return {filename: RegExp.$1, ext: RegExp.$2}; 

,仅允许(在真)列出文件.EXT的。其中,对于以上是txt和doc。这很好,直到遇到一个只是扩展名的文件名,例如.DS_store。如果遇到例如.DS_store,它会停止测试。如何修改语句以优雅地拒绝只包含ext的文件名,同时继续处理其他文件名?

感谢

+0

你是什么意思,它停止测试?它不会匹配正则表达式,但是你想要什么?请详细解释你想在这里改变什么http://jsfiddle.net/B46yq/ – Cheery 2012-02-21 04:51:35

+0

这是行动中的问题:http://jsfiddle.net/B46yq/17/ – cube 2012-02-21 15:07:00

回答

1

试试这个:(不会匹配名为 “.doc”,也没有名为 “.doc”,但将解析: 'MYFILE /普通name.doc'):

data.match(/(?=([\s]*))\1([^\/\\]+)\.(txt|doc)$/i) 

(你吞噬前导空格,但由于名称中的空格是有效的,因此您的情况很复杂,但由于您不能使用possessive quantifiers,所以您的mimic this behavior的积极前瞻性零宽度断言包含零,然后对其进行反向引用。

+0

谢谢,很好!任何想看到/使用它的人:http://jsfiddle.net/B46yq/22/ – cube 2012-02-21 15:59:22

0

试试这个instead.If我理解正确你的问题......

var m = data.split('.')[data.split('.').length-1]; 
return (m == "doc" || m == "txt") ? true : false; 

Here是工作提琴。