2012-01-17 197 views
2

我想从列表中的某些文件中获取文件结尾。正则表达式以匹配以Javascript结尾的文件

<a href="myfile.mp4">File 1</a> 
<a href="http://www.files.com/myfile.ogg">File 2</a> 
<a href="myfile.mp3">File 3</a> 
<a href="http://www.site.com/myfile.jpg">File 4</a> 

基本上,文件endning可以是任何东西,和字符串可以包含的不仅仅是多了一个“”。所以我只需要取得结局。

我想要得到的结果,看起来像:

mp4 
ogg 
mp3 
jpg 

感谢。

回答

2

你可以得到所有链路扩展这样的文件:

var endings = []; 
var links = document.getElementsByTagName("a"); 
var matches; 
for (var i = 0; i < links.length; i++) { 
    if (links[i].href) { 
     matches = links[i].href.match(/\.([^\.]+)$/); 
     if (matches) { 
      endings.push(matches[1]); 
     } 
    } 
} 
// the array endings contains a list of all link extensions 

下面的代码的工作版本:http://jsfiddle.net/jfriend00/XHKaT/

这里的正则表达式匹配一期,随后由字符串末尾的一个或多个非句号字符组成。括号内的分组允许我们额外扩展扩展名,而不需要完成您列出的结果的时间段。

+0

'document.links' sir – Esailija 2012-01-17 23:22:56

+1

@Esailija - 我认为任何真实世界的例子都可能将范围比所有文档的范围更窄,因此OP可以指定从链接数组开始的内容,但是合适。我不认为这是OP要求的解决方案中有趣的部分。他们最想知道如何从给定链接中提取扩展名。 – jfriend00 2012-01-17 23:27:28

0

Feedle

var ext = a.href.split("."); 
ext = ext[ext.length -1]; 
console.log(ext); 

编辑:

var d = document.getElementsByTagName("a"), 
    ext, i, j; 

for(i = 0, j = d.length; i<j; i++){ 
      ext = d[i].href.split("."); 
      ext = ext[ext.length -1]; 
      console.log(ext); 
} 
1

您可以使用jQuery:

  1. 您的所有锚元素。
  2. 对于每个元素,您可以访问.attr(“href”)值,这将是您的地址字符串,即“myfile.mp3”
  3. 然后,您可以将字符串拆分为“。”字符,并将t​​okenArray [tokenArray.length-1]的值添加到结果列表中。

或者香草JS尝试:

function getExtensions(){ 
    var allAnchorTags = document.getElementsByTagName("a"); 
    var extensions = new Array(); 

    for(var i = 0; i < allAnchorTags.length; i++){ 
     var tokenArray = allAnchorTags[i].href.split("."); 
     extensions[i] = tokenArray[tokenArray.length-1]; 
    } 

    return extensions; 
} 

这不相同,除了香草JS语法我的算法描述。给它一个镜头

+0

是,jQuery是伟大的,但我只能在这种特殊情况下使用的核心JS。无论如何感谢 – patad 2012-01-17 23:22:24

+0

好吧,我已经在香草JS语法中添加了原始算法的示例。 – travega 2012-01-18 04:22:48

1

该功能可以根据需要执行,无需报告重复项并保持发现文件扩展名的顺序。

function getLinkedFileExtensions() { 
    var i, len=document.links.length, ext=[], exts={}; 
    for (i=0; i<len; i++) { 
    var a = document.links[i]; 
    if (a.href && a.href.match(/\.([A-Za-z0-9]{1,4})$/)) { 
     var x = RegExp.$1; 
     if (!(x in exts)) { 
     exts[x] = true; 
     ext.push(x); 
     } 
    } 
    } 
    return ext; 
} 
1
var ext = [].map.call(document.links, function (a) { 
    return (a.href.match(this) || [])[1] || ""; 
}, /\.([a-zA-Z0-9]*)$/).filter(String); 

http://jsfiddle.net/hZ9cU/

相关问题