这是我的代码
</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。
答案 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]);