2014-10-18 92 views
0

這裏是我的代碼話只能更換一次

</script> 
    function myFunction() { 
    var a = ["a.m.","p.m","u.k."]; 
    var b = ["its_morning","its_noon","unKnown_thing"]; 
    var str = document.getElementById("textBox1").value; 
     for (var k = 0; k < a.length; k++) { 
     str = str.replace(a[k], b[k]); 
             }; 
    document.getElementById('textBox2').value = str; 
    } 
</script> 

<body> 

    <textarea onkeyup="myFunction();"id="textBox1"></textarea> 
    <TEXTAREA type="text" id="textBox2"></TEXTAREA> 
</body> 

當我鍵入「上午」它的工作正常,但是當我再次鍵入它不變。 like:

'a.m. hello world a.m.'

給出的結果

'its_morning世界你好上午'

這裏是最後的'a.m.'必須更換,但我不知道Wats錯了它

請在javascript中回答,我不熟悉jquery。

+0

@AlexK。我試過那個有點問題。「 – Nakul 2014-10-18 16:45:21

+0

看到有關'escapeRegExp' – 2014-10-18 16:48:41

+0

我不知道爲什麼,但使用這個'escapeRegExp'的東西 – Nakul 2014-10-18 16:55:40

回答

-2

String.replace(String, String)剛剛替換第一次出現。

您可以使用帶有「g」修飾符的正則表達式,以取代每次出現的情況。由於它是動態字符串,因此應該使用RegExp構造函數。

str = str.replace(new RegExp(a[k].replace(/\./g, '\\.'),"g"), b[k]); 
+1

問題在於它會匹配「aim」,因爲「。」或任何字符在中間 – edi9999 2014-10-18 16:23:49

+0

我試過這一個它有兩個問題,一個是:案件無意義的問題,第二個是:它需要'上午'和'akmk'一樣。 – Nakul 2014-10-18 16:24:38

+0

@ edi9999解決.. – 2014-10-18 16:25:15

2

問題是,替換不會自動replaceAll。你必須爲此使用全局正則表達式。

的如不是編寫

string.replace("search","replace")

寫:

string.replace(/search/g,"replace")

的/ g的標誌是指全球範圍內搜索,如的replaceAll

在你的情況,我會寫一個數組作爲正則表達式的數組:

var a = [ /a\.m\./g, /p\.m/g, /u\.k\./g ];

但是,你需要轉義特殊字符,如.

你的代碼應該比是:

<script> 
    function myFunction() { 
    var a = [ 
     /a\.m\./g, 
     /p\.m/g, 
     /u\.k\./g 
    ]; 
    var b = ["its_morning","its_noon","unKnown_thing"]; 
    var str = document.getElementById("textBox1").value; 
     for (var k = 0; k < a.length; k++) { 
     str = str.replace(a[k], b[k]); 
             }; 
    document.getElementById('textBox2').value = str; 
    } 
</script> 
+0

hey @ edi9999我可以使用string.replace(a [k]/g,b [k]); – Nakul 2014-10-18 16:30:04

+0

這是行不通的,JS會認爲你會用g除以[k]。你爲什麼問這個? – edi9999 2014-10-18 16:31:06

+0

,因爲我正在使用數組 – Nakul 2014-10-18 16:32:36