我想要一個正則表達式來匹配像twitter這樣的簡單標籤(例如#someword)。我希望它也能識別非標準字符(如西班牙文,希伯來文或中文)。正則表達式允許使用非ASCII字符的(Twitter類似的)標籤
這是我的初始正則表達式:(^|\s|\b)(#(\w+))\b
- >但它不識別非標準字符。
然後,我嘗試使用XRegExp.js,這工作,但跑得太慢。
有關如何操作的建議?
我想要一個正則表達式來匹配像twitter這樣的簡單標籤(例如#someword)。我希望它也能識別非標準字符(如西班牙文,希伯來文或中文)。正則表達式允許使用非ASCII字符的(Twitter類似的)標籤
這是我的初始正則表達式:(^|\s|\b)(#(\w+))\b
- >但它不識別非標準字符。
然後,我嘗試使用XRegExp.js,這工作,但跑得太慢。
有關如何操作的建議?
最終我發現這個:twitter-text.js有用的鏈接,這基本上是twitter如何解決這個問題。
優秀的回購移動到這裏:https://github.com/twitter/twitter-text/tree/master/js它彙集了所有語言的列表:https:/ /github.com/twitter/twitter-text – user1128896
#([^#]+)[\s,;]*
說明:該正則表達式將搜索#
接着是一個或多個非#
字符,接着0或多個空格,逗號或分號。
var input = "#hasta #mañana #babהַ";
var matches = input.match(/#([^#]+)[\s,;]*/g);
結果:
["#hasta ", "#mañana ", "#babהַ"]
編輯 - 替換\ b。對於字邊界
當試圖匹配所有非哈希字符時,'+'後面的'?'的意思就是「不要太貪婪」。 – itsmejodie
我不認爲'\ b'與非拉丁字符一起工作。 – georg
用'?'它不符合'#mañana',沒有它將'#mañana寶貝'作爲一個標籤進行了regonize。更何況希伯來語 - 根本不承認。 – limlim
與不支持Unicode本機JS正則表達式,你唯一的選擇是明確枚舉可以結束字符例如:
> s = "foo #הַתִּקְוָה. bar"
"foo #הַתִּקְוָה. bar"
> s.match(/#(.+?)(?=[\s.,:,]|$)/)
["#הַתִּקְוָה", "הַתִּקְוָה"]
[\s.,:,]
應包含空格,標點符號以及其他任何可被視爲終止符號的內容。
字邊界不能簡單地與unicode一起使用。請參閱http://www.unicode.org/reports/tr18/#Default_Word_Boundaries – Toto