2012-11-06 104 views
2

我有這個漂亮的功能,但我需要定製它只返回匹配正則表達式的項目數組。所以結果將是#hash1234, #sweetthing,#something_notimportant有沒有什麼辦法可以使用這個函數來做到這一點?返回匹配的子串數組

String.prototype.parseHashtag = function() { 
    return this.replace(/[#]+[A-Za-z0-9-_]+/g, function(t) { 
     var tag = t.replace("#", "%23"); 
     return t.link("http://search.twitter.com/search?q=" + tag); 
    }); 
}; 

var string = '#hash1234 this is another hash: #sweetthing and yet another #something_notimportant';  
$('#result').html(string.parseHashtag()); 
+1

''#hash1234這是另一種散列:#sweetthing和又一#something_notimportant'.match(/ [#] + [A-ZA-Z0-9 -_] + /克)。加入(」 ,「)' – nhahtdh

回答

3

.match method返回所有匹配的數組,或者如果沒有匹配返回null

所以,如果null對於不匹配的情況,然後可以接受的回報:

String.prototype.parseHashtag = function() { 
    return this.match(/[#]+[A-Za-z0-9-_]+/g); 
} 

或者,如果您更願意返回一個空數組或其他默認不匹配:

String.prototype.parseHashtag = function() { 
    return this.match(/[#]+[A-Za-z0-9-_]+/g) || []; 
} 
2

簡單:

String.prototype.findHashTags = function() { 
    return this.match(/[#]+[A-Za-z0-9-_]+/g); 
}; 

string.findHashTags() 
// returns ["#hash1234", "#sweetthing", "#something_notimportant"] 

的模式是完全一樣的。

+1

它也可以在沒有括號的情況下工作。 – nnnnnn

+1

謝謝,很好。 –

+0

不客氣。 +1,對於發佈幾乎相同的答案感到抱歉,但是我在看到你之前就開始打字了,我想包括關於沒有匹配時會發生什麼的信息,所以當我看到你沒有提到的時候我繼續與我的... – nnnnnn

0

使用匹配。

String.prototype.parseHashtag = function() { 
    var t= this.match(/[#]+[A-Za-z0-9-_]+/g); 
    var tag=''; 
    $.each(t,function(index,value) { tag = tag + value.replace('#','%23') + ','; }); 
    return "http://search.twitter.com/search?q=" + tag; 

}; 

var string = '#hash1234 this is another hash: #sweetthing and yet another #something_notimportant';  
$('#result').html(string.parseHashtag());​ 
相關問題