2013-04-05 64 views
1

在这里仍然学习正则表达式,但我需要一点帮助。匹配的文件名基数

我有这个字符串 assets/BigBlueSomething_tn.jpg

我需要匹配这一 BigBlueSomething

最近我得到的是这种 `[^\/][a-zA-Z]+_

问题是,我一直匹配下划线 我已经试过这[^\/][a-zA-Z]+[^_]在几个其他线程的建议,但无济于事。

我正在用javascript编写,我相信有一些正则表达式不能用那种语言工作。

+1

恰恰是做什么的找到你想要的部分的标准是什么?介于'/'和'_'之间?请看[www.regular-expressions.info](http://www.regular-expressions.info/) – Barmar 2013-04-05 23:40:21

回答

1

这应该给你你需要的东西:

var str = 'assets/BigBlueSomething_tn.jpg'; 
var match = str.split('/')[1].match(/[a-z]+/i)[0]; 

编辑:我以前split,否则你不得不循环比赛中提取你所需要的。 match不捕获组。

'assets/BigBlueSomething_tn.jpg' 
     -^---------------------^- // .split('/')[1] 
     -^--------------^- // .match(/[a-z]+/i)[0] 

[a-z] // match any character from a to z 
+ // at least one time 
/i // case-insensitive to match A-Z as well 
+1

的“lookaround operators”的描述。谢谢,你介意解释我/我做了什么? – Spartan9209 2013-04-05 23:24:16

+0

我添加了一些解释。 – elclanrs 2013-04-05 23:33:19

0
/^(?:.*\/)?([0-9a-z]+)(?:_[a-z]+)?\.(?:jpg|jpeg|png|gif)$/i 

此正则表达式 “BigBlueSomething” 匹配以下字符串:

'assets/BigBlueSomething_tn.jpg' 
'BigBlueSomething_tn.jpg' 
'BigBlueSomething_TN.jPeG' 
'dir1/dir2/BigBlueSomething_tn.gif' 
'BigBlueSomething.png' 
'BigBlueSomething_thumb.png' 
'directory/BigBlueSomething_thumb.JPEG' 

this fiddle

1

试试这个:

var text = "assets/BigBlueSomething_tn.jpg"; 
var matches = /assets\/(.+?)_tn.jpg/gi.exec(text); 
if(matches && matches[1]) { 
    var str = matches[1]; 
}