2011-03-21 72 views

回答

0

var str = "/foo=bar?#quesAion#dwdad"; 
var regi = new RegExp("(#[a-z0-9_-]*)", "gi"); 
var hashtag = str.match(regi); 

Hashtag將是找到的字符串的數組,如果沒有找到,則返回null。

3

你的行的字符串

var hashtag = str.match(/#question?#idea?/i); 

檢查是否含有文字#questio,任選地接着n,隨後#ide,任選接着a。如果是這種情況,hashtag[0]將包含匹配的文本。這顯然不是你想要的。

試試這個:

// match a #, followed by either "question" or "idea" 
var myregexp = /#(question|idea)\b/i; 
var match = myregexp.exec(subject); 
if (match != null) { 
    result = match[1]; // will contain "question" or "idea" 
} else { 
    result = ""; 
} 

\b在表達式的末尾是一個字邊界錨。它確保只有#question而不是#questionnaire將被匹配。

如果你不知道的主題標籤的名稱請先用

var myregexp = /#(\w+)/; 

(這允許ASCII字母,數字和下劃線儘可能包括hashtag的人物 - 我不知道如果這些是唯一有效。人物如果沒有,你可以使用一個字符類。例如,允許破折號,也:。

var myregexp = /#([\w-]+)/; 
1

沒有你的正則表達式是不正確的

/#question?#idea?/i 

您可以按照此順序搜索正則表達式中的每個字符。 ?使得字符在到達0或1次之前,我在最後使表達ignoreCase,即處理大小寫相同。你會發現:

#question#idea 
#questio#ide 
#questio#idea 
#QUEStion#IDea 

但不

#question 
#idea 

你有沒有一套固定的標籤,他們只能包含字母或數字也或其他字符?

你可以檢查你的正則表達式例如這裏在線My example