2013-01-14 20 views
0

如何在JavaScript中編寫正則表達式,它與所有Twitter類似的提及(@something)匹配,但不包含電子郵件地址。JavaScript中的正則表達式以提及

我需要在一個巨大的文本字段中捕獲無限數量的提及。應該捕獲具有不可打印字符和「@」前面的括號的字符串。

+0

難道不會像'^ @ [a-zA-Z0-9] + $'?我不知道其他角色是否允許,但只需將它們添加到括號中。 – gsingh2011

回答

4
/(?<!\w)@\w+/g 

將是一個簡單的解決方案,但由於JavaScript不支持lookbehind它成爲一個不平凡的任務:

var matches = str.match(/(^|\W)@\w+/g); 
for (var i=0; i<matches.length; i++) 
    matches[i] = matches[i].replace(/^[^@]/, ""); 

如果你想支持更廣泛的範圍字符(如從你的編輯),你可以使用

/(?<![^\s(]@\S+/g // or respectively 
/(^|[\s(])@\S+/ 
+0

偉大的解決方案! – Acacio

2

你可以使用這個表達式

/(\s|^)@[^\s]+/ 

\s代表空間..

+0

括號不適用。 – Acacio

+1

糟糕的JavaScript正則表達式沒有lookbehind斷言。根據您的需要,在圓括號內添加標點符號,如'(\ s | \(| ^)'。 –

0

快速的jsfiddle回答你:

var re = /\[email protected][\w\-]/ 

Or just Click Here

注意,您可以在控制檯看到正則表達式的結果(例如Firebug)。

+0

http://jsfiddle.net/Vtwdy/2/ – Bergi

+0

好吧,但我如何捕獲所有馬上提及? – Acacio