2012-01-17 102 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/

相關問題