2012-03-07 67 views
3

我有一個關鍵字的數組,我想知道是否關鍵字中的至少一個是一些已提交字符串內找到。我進一步想要確保它是匹配的關鍵字,而不是與該詞非常相似的關鍵詞。麻煩與字邊界( B)

說,例如,我們的關鍵詞是[English, Eng, En],因爲我們都在尋找英語的一些變化。

現在,說是從用戶輸入的是i h8 eng class,或一些其他類似的挑釁和文盲 - 然後eng亦宜。還應不匹配像england一個單詞或一些奇怪的事情chen,即使它得到了en位。

所以,在我的無限缺乏智慧我相信我能做到沿此線的東西,以配合我與輸入數組項:

.match(RegExp('\b('+array.join('|')+')\b','i')) 

隨着思維的正則表達式將尋求從陣列中,現在提出像(English|Eng|En)比賽,然後看看,看看是否有任何一方零寬度字界限。

+1

+1讓我笑 – cambraca 2012-03-07 15:08:04

回答

5

您需要反斜線。

當你創建一個RegExp()構造一個正則表達式,你傳遞一個字符串。 JavaScript字符串常量語法將反斜槓視爲元字符,用於引用引號等。因此,反斜槓將被有效剝離出來之前代碼甚至運行了!

通過加倍他們,解析字符串的步驟將留下一個反斜槓。然後RegExp()解析器會看到之前的「B」的單反斜線和做正確的事。

+0

這似乎讓一切都應該通過增加一個額外的斜槓轉義更好!小時候就像石膏一樣。非常感謝,謝謝。 – tesc 2012-03-07 15:17:12

3

您需要在JavaScript字符串中的反斜槓,否則你會編碼退格字符:

.match(RegExp('\\b('+array.join('|')+')\\b','i')) 
1

您需要雙擊逃脫\b,因爲它在字符串中的特殊價值:

.match(RegExp('\\b('+array.join('|')+')\\b','i')) 
1

\b是字符串(參見上表this page 2.1)內的轉義序列。

.match(RegExp('\\b('+array.join('|')+')\\b','i')) 

正則表達式文本中使用時,你不需要逃避\b

/\b(english|eng|en)\b/i