2015-11-26 60 views
0

我發現了很多正則表達式的例子來從文本中檢索hashtags。不幸的是,沒有任何例子是我需要的。hashtags的正則表達式

這幾乎是我所需要的,但...

function hashtags(text) { 
return text.replace(/(^|\s)#(\w*[a-zA-Z]+\w{2,50})/g, 
"$1<a href='/h/$2' target='_blank'>#$2</a>"); 
} 

#標籤不能以數字開頭,以避免情況下,當例如第12號得到hashtaged。

上面的例子檢查它,但它不允許像ÁÉÍÚ這樣的字符,它不正確地檢查標籤長度並且不允許字符' - '。

所以,我需要如下:

  1. #標籤可與任何字母開頭 - A,Z,B,N,O,U等,但不能以數字,而不是用特殊標記&%$或 - _

  2. 標籤總長度必須爲3-50個字符。正則表達式必須接受只有完整單詞的標籤,但不能在第一個50個字符後剪切它們。因此,以#開頭但包含超過50個字符的單詞必須被忽略,而不是將前50個字符轉換爲hashtag鏈接。在我的示例{2,50}不能正確工作。

  3. 標籤的其餘部分(當選中它不以數字或特殊標誌開頭時)可能包含數字,任何字母和_ -標誌。 \w只允許_但不-

這可能嗎?

+0

你有簡單的測試輸入嗎? –

+0

我認爲你可以適應[這個解決方案](http://stackoverflow.com/a/31115742/3832970)。 –

回答

0

試試這個:

/(^|\s)#([^\d&%$_-]\S{2,49})\b/g 

解釋:

(^|\s)   # 
#([^\d&%$_-]  # not the characters you mentioned in the first position 
\S{2,49})  # the first chracter was already matched 
\b    # a boundary to avoid overflow 50 characters 

希望它能幫助。

0

對於1 - 你需要一個角色類。你可以用方括號來定義這些。 PCRE定義了\w,但也包括數字。

對於2 - 您可以有一個單詞,後跟'某些空格'(PCRE:\s),或者使用環視模式(?![A-Z0-9]) - 「沒有跟着這個。

而對於3 - 非空白可能是你想要的 - \S PCRE的定義。

/(?<!\w)#[A-Z]\S{1,49}(?!\w)/i 

Demo

編輯:鑑於這可能是特定的JavaScript,而不能使用回顧後,則上述可能不適合你的工作。如果您將我們的正則表達式查詢綁定到特定語言,那麼在問題中指定該約束將很有用。

+0

'在這種情況下可以用於標記原始問題中的特定語言。 – Sobrique

相關問題