2012-07-27 63 views
-1

我正在一個簡單的項目中生成Facebook BBCode(或類似的東西)在聊天時可以使用的圖像。JavaScript奇怪替換

這裏是我的全碼:

<html> 
<head> 
</head> 
<body> 
<script type="text/javascript"> 
function gear() 
{ 
var textArea = document.getElementById("id"); 
var insertedText = theForm.theText.value; 
var charChanger = insertedText.replace(/a/ig, "[[f9.cha]] ").replace(/b/gi, "[[f9.chb]] ").replace(/c/gi, "[[f9.chc]] ").replace(/d/gi, "[[f9.chd]] ").replace(/e/gi, "[[f9.che]] ").replace(/f/gi, "[[f9.chf]] ").replace(/g/gi, "[[f9.chg]] ").replace(/h/gi, "[[f9.chh]] ").replace(/i/gi, "[[f9.chi]] ").replace(/j/gi, "[[f9.chj]] ").replace(/k/gi, "[[f9.chk]] ").replace(/l/gi, "[[f9.chl]] ").replace(/m/gi, "[[f9.chm]] ").replace(/n/gi, "[[f9.chn]] ").replace(/o/gi, "[[f9.cho]] ").replace(/p/gi, "[[f9.chp]] ").replace(/q/gi, "[[f9.chq]] ").replace(/r/gi, "[[f9.chr]] ").replace(/s/gi, "[[f9.chs]] ").replace(/t/gi, "[[f9.cht]] ").replace(/u/gi, "[[f9.chu]] ").replace(/v/gi, "[[f9.chv]] ").replace(/w/gi, "[[f9.chw]] ").replace(/x/gi, "[[f9.chx]] ").replace(/y/gi, "[[f9.chy]] ").replace(/z/gi, "[[f9.chz]] "); 

textArea.innerHTML = charChanger; 
} 
</script> 
<div align="center"><form name="theForm"> 
<textarea rows="5" name="theText" cols="120" onkeyup="gear();"></textarea> 
<br> 
<textarea readonly id="id" rows="20" cols="120"></textarea> 
</form></div> 
</body> 
</html> 

有兩個<textarea>秒。第一個填充字符串,第二個用替換值替換字符串。

該函數在keyup事件後開始工作。它應該完美地工作,但是它會返回一些奇怪的替換,從一個字符開始到G(其餘的正在工作)。 那麼有沒有修復?或者另一種方式,如使用數組替換?

+0

你從'了'替換字符'g',所以我預料的結果。你能解釋代碼實際上應該做什麼嗎? – Ryan 2012-07-27 23:10:38

回答

0

您不需要100次更換,只需一次即可。

insertedText.replace(/([a-z])/gi, '[[f9.ch$1]]') 

http://jsfiddle.net/PRYWm/1/

+0

問題解決了!我的編碼總是很亂,而正則表達式很酷! 謝謝@elclanrs – nokeye 2012-07-27 23:18:58