单词只被替换一次

时间:2014-10-18 16:18:31

标签: javascript

这是我的代码

</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>

当我输入'a.m.'时它的工作正常,但当我再次打字它没有改变。 喜欢:

  

“A.M。你好世界a.m。'

给出结果

  

'its_morning hello world a.m。'

这里是最后一个'a.m.'必须更换,但我不知道它的错误

请用javascript回答,我不熟悉jquery。

2 个答案:

答案 0 :(得分:2)

问题是替换不会自动替换所有。你必须使用全局正则表达式。

例如,而不是写

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>

答案 1 :(得分:-2)

String.replace(String, String)只是替换了第一次出现。

您可以将正则表达式与“g”修饰符一起使用,以便替换每次出现的内容。因为它是动态字符串,所以你应该使用RegExp构造函数。

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