2013-02-07 75 views
0

我已經在jQuery的,寫的下面:查找和使用按鍵的排列找到替換和數組值替換

$(document).ready(function() { 

    var wordlist = new Array(); 
    wordlist['BioResource'] = 'Bio Resource is a lorem'; 

    var array_length = wordlist.length; 

    for(var key in wordlist) { 
     $("p").html(function(index, value) { 

      return value.replace(new RegExp("\b(" + key + ")\b", "gi"), '<a href="#" class="test" title="'+wordlist[key]+'">$1</a>'); 

     }); 
    } 

}); 

它應該(但沒有),通過詞表陣列環和對於每個鍵,嘗試在任何段落標籤中找到該單詞並將其替換爲自身,但將其封裝在具有該鍵處數組的適當值的標題標籤的錨點中。

我在做什麼錯?

正則表達式,如果我從這個刪除陣列方面,直接輸入鍵和值像這本身就是工作:

return value.replace(/\b(BioResource)\b/gi, '<a href="#" class="test" title="'+wordlist['BioResource']+'">$1</a>'); 

在此先感謝您的幫助。

保羅

+1

你能給我們舉一些你有什麼數據和你想要返回的例子嗎?另外,如果你像''wordlist ['BioResource']那樣訪問它''wordlist''不是'Array',而是'Object'。使用'= {};'而不是'= new Array();'。 – Cerbrus

+0

感謝您提示將其指定爲對象。 – PaulSkinner

回答

3

更改此:

"\b(" + key + ")\b" 

要這樣:

"\\b(" + key + ")\\b" 

\b在字符串字面量代表退格符。即使它沒有任何特殊含義,要在字符串中指定\,您需要將其轉義:\\。否則,\只會汽化,否則會引發語法錯誤。

+0

你們怎麼這麼快就回答這個問題!並解釋瞭解決方案!當時間限制結束後,你會得到積分(儘管@salexch擊敗你),因爲你有一個解釋)。 – PaulSkinner

0

您可以將其翻轉並替換任何可找到的單詞。這樣您只需遍歷每個段落文本即可執行實際替換。

此解決方案使用(\w+)查找每個段落內的所有單詞,並查看內容是否與您的wordlist對象匹配。如果發現它會進行替換,如果不能,它將單獨留下該單詞。

$('p').html(function(index, old) { 
    return old.replace(/(\w+)/g, function($0, $1) { 
     return wordlist[$1] || $0; 
    }); 
});