2013-06-05 38 views
11

我想要一個正則表達式來匹配像twitter這樣的簡單標籤(例如#someword)。我希望它也能識別非標準字符(如西班牙文,希伯來文或中文)。正則表達式允許使用非ASCII字符的(Twitter類似的)標籤

這是我的初始正則表達式:(^|\s|\b)(#(\w+))\b
- >但它不識別非標準字符。
然後,我嘗試使用XRegExp.js,這工作,但跑得太慢。

有關如何操作的建議?

+0

字邊界不能簡單地與unicode一起使用。請參閱http://www.unicode.org/reports/tr18/#Default_Word_Boundaries – Toto

回答

7

最終我發現這個:twitter-text.js有用的鏈接,這基本上是twitter如何解決這個問題。

+0

優秀的回購移動到這裏:https://github.com/twitter/twitter-text/tree/master/js它彙集了所有語言的列表:https:/ /github.com/twitter/twitter-text – user1128896

0

#([^#]+)[\s,;]*

說明:該正則表達式將搜索#接着是一個或多個非#字符,接着0或多個空格,逗號或分號。

var input = "#hasta #mañana #babהַ"; 
var matches = input.match(/#([^#]+)[\s,;]*/g); 

結果:

["#hasta ", "#mañana ", "#babהַ"] 

編輯 - 替換\ b。對於字邊界

+0

當試圖匹配所有非哈希字符時,'+'後面的'?'的意思就是「不要太貪婪」。 – itsmejodie

+0

我不認爲'\ b'與非拉丁字符一起工作。 – georg

+1

用'?'它不符合'#mañana',沒有它將'#mañana寶貝'作爲一個標籤進行了regonize。更何況希伯來語 - 根本不承認。 – limlim

2

與不支持Unicode本機JS正則表達式,你唯一的選擇是明確枚舉可以結束字符例如:

> s = "foo #הַתִּקְוָה. bar" 
"foo #הַתִּקְוָה. bar" 
> s.match(/#(.+?)(?=[\s.,:,]|$)/) 
["#הַתִּקְוָה", "הַתִּקְוָה"] 

[\s.,:,]應包含空格,標點符號以及其他任何可被視爲終止符號的內容。

相關問題