我有两个字符串,我想输出一个字符串,其中两个字符串都给出相同的值。 e.g。
var string1 = "ab?def#hij@lm";
var string2 = "abcd!f#hijkl]";
//expected output would be "abcdef#hijklm"
我认为这样做的一种方法是将每个字符分配给一个数组,然后单独比较每个字符但这似乎效率低下,因为我将通过具有数万个字符的字符串传递它。
任何帮助都表示赞赏,不必是代码,只是为了引导我向大方向发展。
答案 0 :(得分:3)
您可以将replace
与其回调参数一起使用:
string1.replace(/[^a-z]/ig, (_, i) => string2[i])
var string1 = "ab?def#hij@lm";
var string2 = "abcd!f#hijkl]";
var res = string1.replace(/[^a-z]/ig, (_, i) => string2[i]);
console.log(res);

这将有利于字母,但如果两个字符串在同一位置有不同的字母,string1
中的字符将优先。另一方面,如果两者都有非字母,那么string2
将采用{。}}。
答案 1 :(得分:0)
你可以循环并检查角色。
var string1 = "ab?def#hij@lm",
string2 = "abcd!f#hijkl]",
result = '',
i,
letter = /[a-z]/i;
for (i = 0; i < string1.length; i++) {
if (string1[i].match(letter)) {
result += string1[i];
continue;
}
if (string2[i].match(letter)) {
result += string2[i];
continue;
}
result += string1[i];
}
console.log(result);
答案 2 :(得分:0)
可能你可以这样做;
var string1 = "ab?def#hij@lm",
string2 = "abcd!f#hijkl]",
result = [].map.call(string1,(c,i) => /[a-z]/.test(c) ? c
: /[a-z]/.test(string2[i]) ? string2[i]
: c)
.join("") ;
console.log(result);
答案 3 :(得分:0)
如果我的逻辑正确,我想你可以做如下的事情:
var string1 = "ab?def#hij@lm";
var string2 = "abcd!f#hijkl]";
var array1 = string1.split('');
var array2 = string2.split('');
var resultArray = [];
var output;
for (var i = 0; i < array1.length; i++) {
if (array1[i] != array2[i] && array2[i].match(/[a-z]/i)) {
array1[i] = array2[i];
}
resultArray.push(array1[i]);
}
output = resultArray.join();