如何在javascript中动态替换字符串
我有这个字符串:如何在javascript中动态替换字符串,javascript,arrays,regex,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 num
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
中的每个单词,例如:
text1
中的单词Ferrari将与汽车中的一个
值匹配,因此它将被宝马、丰田或梅赛德斯随机替换,但不是Ferrari,也不是任何一款手机的
值。(假设它被宝马随机替换)text1
中的Mercedes一词不能被宝马和梅赛德斯取代text1
中分类为phones
text1=“宝马丰田宝马安卓诺基亚三星诺基亚iOS”代码>
Android和iOS没有被替换,因为它们不在任何阵列列表中
获取此信息的有效方法是什么?我将使用此工作流:
为每个对象类型定义正则表达式:rxCars:
\(丰田|宝马|法拉利|梅赛德斯)\gi
获取给定文本的匹配项1
定义JavasScript关联数组以包含Mathc/替换对
遍历匹配项,检查关联数组。。。如果(AssociationArray[“toyota”!=null){}
如果是新的,请从cars数组中选择一个随机替换项,然后从cars数组中删除该项。
如果它已经存在,请跳过并继续下一个匹配
检查每个匹配项后,遍历关联数组,对每个项执行替换
希望这有帮助。这是一种方法
随机生成两个介于1和阵列长度(汽车/电话)之间的“偏移”数字
创建一个空的“映射器”散列来存储新旧名称的映射
循环遍历cars数组中的所有索引值,使用key=cars[index]和value=cars[index+offset%cars.length]向“namemapper”添加一个值,这将确保每个旧名称都映射到一个不同的新名称
对手机做同样的事情
拆分“”上的字符串以获取单词数组(我称之为splitText)
定义一个空的应答字符串,并且两者都=电话+汽车
使用for循环访问splitText的每个值
在这个for循环中,检查每个单词是否都在'both'数组中,可以使用第二个for循环访问数组中的每个字符串,并使用===
如果是,请将映射器中与此键对应的值附加到答案字符串
否则,将splitString值附加到回答字符串
添加一个空格
代码如下:
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 += ' ';
}
var carOffset=Math.ceil(Math.random()*(cars.length-1));
var phoneOffset=Math.ceil(Math.random()*(phones.length-1));
var映射器={};
对于(变量i=0;i
好的,发布您的尝试。Stackoverflow不是帮助台。如果你不能让你的代码正常工作,试着做点什么,把你试过的代码发布出来。不,我还没有尝试过,我只是开始想象,把每个单词分成文本1,然后在正则表达式中循环,但是太多的正则表达式使我的笔记本电脑昨天运行速度变慢,大小写不同。。这只是我在朋友手机上看到游戏后的想象逻辑,我9岁了,所以我想我有很多像这样无用的想象,很抱歉问你喜欢吗this@GeorgeJempty我从来没有要求任何代码,我只是想帮助你们找到一个有效的方法来做到这一点(是工作流程还是流程图,是吗?)我的学校没有教这个雪人试图避免正则表达式,因为昨天我的笔记本电脑运行缓慢,而尝试了太多的正则表达式,不同的情况下,如果这是不可避免的,我会尝试正则表达式当你说“不同的情况下”,你的意思是使用模式替代情况?最后应该使用不区分大小写的模式://i。不,我的意思是,不同的程序我昨天尝试构建文本搜索,这一个完全不同的程序谢谢你的建议,我将尝试构建代码谢谢先生,我将尝试逻辑,我真的很感谢你花时间教我,谢谢对不起,我又看了一眼,不确定这正是你想要的。我会试着回复你…我想这个更新的解决方案现在确实回答了这个问题。我还没有尝试你的代码,现在就在我的脑海中运行它。我特别喜欢这个技术。我认为有两种方法可以进行字符串匹配模式,循环或正则表达式afaik从我在stackoverflow中的其他问题上读到的,我可能会在这一个问题上使用正则表达式,我需要更多的动态概率,谢谢你的帮助