使用数组元素进行搜索并使用javascript替换所有元素?

时间:2017-08-22 12:03:32

标签: javascript arrays

说,我有一个字符串

'I am abc1, my age is abc2 and I live in abc3, abc1'

和看起来像

的数组
['abc1/xyx1', 'abc2/xyx2', 'abc3/xyx3']

我尝试使用以下方式使用数组中的每个元素对字符串执行搜索并替换所有

replace abc1 by xyz1, abc2 by xyz2 etc..

即。脚本运行后,输出字符串将是

I am xyz1, my age is xyz2 and I live in xyz3, xyz1

这是我到目前为止所尝试的

var myString = 'I am abc1, my age is abc2 and I live in abc3, abc1';
var myArray = ['abc1/xyx1', 'abc2/xyx2', 'abc3/xyx3'];
for (var i=0; i<=myArray.length; i++){
var a1 = myArray[i];
var xs = a1.split("/");
var new1=xs[0];
var new2=xs[1];
var replaced = myString.replace(/new1/g, new2);
}
document.write(replaced);

但它不起作用。有人可以帮忙吗?

4 个答案:

答案 0 :(得分:2)

基本上你循环太多了,取i < myArray.length你需要变量的值作为正则表达式。

您可以使用构造函数并构建新的正则表达式对象。

最后,您需要替换相同的字符串并分配给相同的字符串,否则您已被替换,但您只能获得最后一次替换。

&#13;
&#13;
var myString = 'I am abc1, my age is abc2 and I live in abc3, abc1',
    myArray = ['abc1/xyx1', 'abc2/xyx2', 'abc3/xyx3'],
    i, xs, new1, new2;

for (i = 0; i < myArray.length; i++) {
    xs = myArray[i].split("/");
    new1 = xs[0];
    new2 = xs[1];
    myString = myString.replace(new RegExp(new1, 'g'), new2);
}

console.log(myString);
&#13;
&#13;
&#13;

答案 1 :(得分:1)

尝试这种方法。

首先拆分keys/values并获取一个包含旧词和新词的新数组(keyValue)。然后我迭代keyValue并用它的值替换text

var text = 'I am abc1, my age is abc2 and I live in abc3, abc1';
var words = ['abc1/xyx1', 'abc2/xyx2', 'abc3/xyx3'];

var keyValue = words.map(item => {
  var arr = item.split('/');
  return [arr[0], arr[1]];
});

keyValue.forEach(item => {
  text = text.replace(new RegExp(item[0], 'g'), item[1]);
});

console.log(text);

答案 2 :(得分:0)

您可以迭代words数组usign String.prototype.forEach()并在每个循环中将元素wString.prototype.split()分开以创建数组变量a您需要创建正则表达式并调用String.prototype.replace()

的两个索引元素

var text = 'I am abc1, my age is abc2 and I live in abc3, abc1';
var words = ['abc1/xyx1', 'abc2/xyx2', 'abc3/xyx3'];

words.forEach(function (w) {
  var a = w.split('/');
  text = text.replace(new RegExp(a[0], 'g'), a[1]);
});

console.log(text);

答案 3 :(得分:0)

功能性方法:

var text = 'I am abc1, my age is abc2 and I live in abc3, abc1';
var words = ['abc1/xyx1', 'abc2/xyx2', 'abc3/xyx3'];

var result = words.reduce((text, word) => {
  var [ oldWord, newWord ] = word.split('/');
  return text.replace(new RegExp(oldWord, 'g'), newWord);
}, text);

console.log(result);