javascript - 如何在javascript中动态替换字符串

标签 javascript arrays regex

我有这个字符串:

var text1 = "Ferrari Mercedes Ferrari Android iPhone LG iPhone iOS";
//text1 could be anything

我有这些数组:

var cars = ['Toyota', 'BMW', 'Ferrari', 'Mercedes'];
var phones = ['Nokia', 'Samsung', 'LG', 'iPhone'];
// cars values are fixed, but number of array could be increased

我想将 text1 中的每个单词替换为数组中具有相同值的单词/值之一,示例:

  1. text1 中的单词 Ferrari 将匹配 Cars 值之一,因此它将被随机替换为 BMWToyotaMercedes 但不是 Ferrari 也不是 phone 值之一。 (假设它被随机替换为 BMW)

  2. 第二个 Ferrari 词也将替换为 BMW

  3. 但是 text1 中的 Mercedes 词不能替换为 BMWMercedes

  4. 同样的术语也适用于 text1 中分类在 phones

    中的单词
  5. 我希望结果是这样的:

text1 = "BMW Toyota BMW Android Nokia Samsung Nokia iOS";

  1. AndroidiOS 没有被替换,因为它们不在任何数组列表中。

得到这个的有效方法是什么?

最佳答案

这是一种方法。

  1. 在 1 和数组长度(汽车/电话)之间随机生成两个“偏移”数字
  2. 创建一个空的“映射器”散列来存储您的新旧名称映射
  3. 遍历汽车数组中的所有索引值,使用键 = cars[index] 和值 = cars[index + offset % cars.length] 向“namemapper”添加一个值,这将确保每个旧的名称映射到不同的新名称
  4. 对手机做同样的事情
  5. 拆分 ' ' 上的字符串以获得单词数组(我称之为 splitText)
  6. 定义一个空的答案字符串并且两者 = phones + cars
  7. 使用 for 循环访问 splitText 的每个值
  8. 在此 for 循环中,检查每个单词是否在“both”数组中,您可以通过使用第二个 for 循环来访问数组中的每个字符串并使用 === 检查是否相等来执行此操作
  9. 如果是,将映射器中与此键对应的值附加到答案字符串
  10. 否则,将 splitString 值附加到您的答案字符串
  11. 添加空格

代码如下:

var carOffset = Math.ceil(Math.random() * (cars.length-1));
var phoneOffset = Math.ceil(Math.random() * (phones.length -1));
var mapper = {};

for(var i = 0; i < cars.length; i++){
    j = (i + carOffset) % cars.length;
    mapper[cars[i]]=cars[j];
}
for(var i = 0; i < phones.length; i++){
    j = (i + phoneOffset) % phones.length;
    mapper[phones[i]]=phones[j];
}

var splitText = text1.split(' ');
var ansString = '';
var both = cars + phones;
for(var i = 0; i < splitText.length; i++){
    var flag = 0;
    for(var j = 0; j< both.length; j++){
        if(splitText[i]===both[j]){
            ansString += mapper[splitText[i]];
            flag += 1;
        }
    }
    if(flag === 0){
        ansString += splitText[i];
    }
    ansString += ' ';
}

关于javascript - 如何在javascript中动态替换字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31492242/

相关文章:

javascript - 如何在保持相同 API 的同时将此 JavaScript 包装在立即调用的函数表达式 (IIFE) 中?

java - 将 json 数组数据填充到 android 动态微调器中

regex - 在 PowerShell 中仅打印非空行

regex - Perl 问号后跟冒号模式匹配

javascript - CSS - 如何在容器内动态填充子项

javascript - 在加载 ajax 内容时向下移动加载 div

javascript - 如何在 mongoose 中使用 $set 动态更新嵌入式文档

Python/Numpy : How do I renumber an existing array with repeating instances?

c++ - `delete []`时使用 `new [0]`

javascript - .replace 在 Javascript 中不起作用\n