2011-01-21 56 views
1

我正在爲學校開發一個Web應用程序。他們有像course_nameclass_name的條款。將課程想象爲一個課程的模板,這意味着課程必須繼承課程的大部分屬性。現在在Javascript中使用正則表達式來匹配特殊符號

,該class_name必須包含course_name。例如:如果course_name是「CSS」,那麼class_name可以是「CSS 101」或「Beginning CSS」。使用正則表達式檢查這很容易。我曾經使用單詞邊界\ b \ b。

不過,我最近跑進了用戶輸入的是「HTML(初級)」爲course_name的問題。 \ b作爲單詞邊界在這種情況下將不再起作用以在class_name中找到匹配。有人可以幫助我嗎?我的大腦正在思考着所有的可能性。該解決方案應涵蓋大部分(如果不是全部)情況。

馬克

+0

也許我是不是在我的最後一段明確。在「HTML(Beginner)」上使用單詞邊界,如下所示:新的RegExp(「\\ b」+ course_name +「\\ b」)由於括號而不起作用。如果沒有括號存在,那麼正則表達式將是完美無缺的... – Mark 2011-01-21 03:14:48

回答

0
var courses = "HTML (Beginner)".match(/\w+/g);//gives ["HTML", "Beginner"]; 
if (courses)//can be null if no word chars found 
    for (var i = 0; i < courses.length; i++) 
    //look for course[i] in your list of courses 
+0

就像我上面提到的那樣。有class_names和course_names和class_names必須絕對包含course_names中找到的每個單個字符。做/ \ W + /只會匹配單詞......我的問題是:如何將括號與單詞一起匹配? – Mark 2011-01-21 03:09:57

0

您可以使用「一個或多個空格」作爲一個單詞分隔符來提取的話,然後做一個比較合適的?

VAR課程= 「HTML(初級)」 匹配(/ [^ \ S] + /克)。; //可以得到:「HTML」,「(初級)」]

0

首先,你需要能夠正則表達式轉義課程名稱。我使用的代碼this question

course_name.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&') 

爲了模擬邊界時course_name第一/最後一個字符可能不是字字符,請使用下列內容:

RegExp("(?:^|\\W)" + str + "(?:$|\\W)") 

在開始的時候,我們檢查字符串的開頭還是非單詞字符,最後檢查字符串的結尾還是非單詞字符。

把這些在一起,我們有:

RegExp("(?:^|\\W)" + course_name.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&') + "(?:$|\\W)") 
相關問題