2013-06-30 17 views
0
var v = $(forum[yourVersion]+' a[href*="youtube.com/v/"]'); 
    for (i = 0; i < v.length; i++) { 
    var match = v[i].href.match(/\(((\s*?.*?)*?)\)/); 
    v[i].href = v[i].href.replace(match[0],''); 
    var c = v[i].href.replace(/(www\.)?youtube.com/, 'img.youtube.com'); 
    var d = c.replace('v','vi'); 
    v[i].outerHTML= '<a class="uTubeE" rel="vid_gallery" title="'+match[1]+'" href="' + v[i].href + '"><span class="uTubeE_overlay"></span><img src="'+ d +'/0.jpg"/>'; 
    v[i].className='uTubeE'; 
    } 

我試圖正確地得到這兩項工作,和早期有人返回0,幫我記住.match(),做這一點 -使用.match()未定義

var match = v[i].href.replace(/\(((\s*?.*?)*?)\)/,''); 
當然是工作的

,但我需要得到它,所以我可以使用match [0]和match [1]用於以後的用途,例如title屬性。

任何人都可以幫忙嗎?

這是使用YouTube視頻的默認縮略圖

 var c = v[i].href.replace(/(www\.)?youtube.com/, 'img.youtube.com'); 
    var d = c.replace('v','vi'); 

我匹配的網址是說www.youtube.com/v/dje838329但URL將拿出作爲 www.youtube.com/v/dje838329(titleOfMovie)

我想抓住的數據(titleOfMovie)供以後使用。

不要說它的方式錯了,請提出一些有用的意見,比如說可能是什麼錯誤,因爲它的工作不能像我應該用於以後的目的。

+6

我想你需要把它分解成一個較小的組件。我甚至不知道你在做什麼。 – jedmao

+0

如果您發佈了一些您正在嘗試匹配的網址,它會有很大的幫助。 – Pointy

+0

第一個正則表達式試圖做什麼?不管它是什麼都是錯的。 –

回答

2

我把你的表情\(((\s*?.*?)*?)\),它處理你的示例文本www.youtube.com/v/dje838329(titleOfMovie)。我做了一對夫婦的小變化吧:

正則表達式:\(([^)]*)\)

  • \(比賽開巴蘭
  • (啓動捕獲組
    • [^)]*匹配所有的非親密巴蘭字符
    • )結束捕獲組
  • \)比賽結束巴蘭

enter image description here

JavaScript代碼示例:

示例文字

www.youtube.com/v/dje838329(title of the movie)** 

代碼

<script type="text/javascript"> 
    var re = /\(([^)]*)\)/; 
    var sourcestring = "source string to match with pattern"; 
    var matches = re.exec(sourcestring); 
    for (var i=0; i<matches.length; i++) { 
    alert("matches["+i+"] = " + matches[i]); 
    } 
</script> 

捕捉組

[0] => (title of the movie) 
[1] => title of the movie 

免責聲明

當然會失敗,如果使用字符串沒有標題的(name of the movie)格式

+0

正如我後來在測試和調試中所做的那樣,我必須走出去。但我想到的是這樣的,我改變了我的舊正則表達式到你有... 'var match = \(([^)] *)\)。exec(v [i]。 HREF); if(match == null){ title =「」; 繼續; } else { v [i] .href = v [i] .href.replace(match [0],''); title = match [1]; }' – EasyBB

1

匹配.match()返回undefined

這不是你得到的錯誤。問題在於,當正則表達式不匹配時,您正在訪問match result0屬性,該屬性可能爲null。在嘗試獲得結果之前,您必須對此進行測試。

使用replace工作,但我需要它,所以我可以用比賽[0]搭配[1]爲以後使用

你可以嘗試一個替代品的功能,但是這只是將得到醜陋。你的match沒問題,特別是因爲你沒有做任何奇特的操作。只需取其匹配的索引,並切片你的網址。

順便說一句,如果你有jQuery可用,你真的應該使用它。

var v = $(forum[yourVersion]+' a[href*="youtube.com/v/"]').each(function() { 
    var url = this.href, 
     match = url.match(/\(((\s*?.*?)*?)\)/); 
    if (match == null) 
     return; // abort! 
    var d = url.replace(/(www\.)?youtube.com\/v/, 'img.youtube.com/vi'); 
    this.href = url.slice(0, match.index); 
    this.className = "uTubeE" 
    this.rel = "vid_gallery"; 
    this.title = match[1]; 
    this.innerHTML = '<span class="uTubeE_overlay"></span><img src="'+ d +'/0.jpg"/>'; 
}); 
+0

我明白你現在在說什麼,儘管我從來沒有使用'.each()'。我使用for循環,因爲它更快,尤其是如果你在'.each()'中做了很多事情'謝謝你的解釋,我很感激。 – EasyBB

+0

如果你對速度的期望很高,你根本就不會使用jQuery,尤其是沒有這樣低效的選擇器。帶回調的'each'很好,封裝有助於編寫更乾淨的代碼。在循環中,你必須用'v [i]'替換'this'並用'continue'替換'return'。如果你喜歡這個解釋,不要忘記加註和/或接受答案。 – Bergi