比较两个字符串和两个相等的输出结果

时间:2016-10-11 19:26:57

标签: javascript

我有两个字符串,我想输出一个字符串,其中两个字符串都给出相同的值。 e.g。

var string1 = "ab?def#hij@lm";
var string2 = "abcd!f#hijkl]";

//expected output would be "abcdef#hijklm"

我认为这样做的一种方法是将每个字符分配给一个数组,然后单独比较每个字符但这似乎效率低下,因为我将通过具有数万个字符的字符串传递它。

任何帮助都表示赞赏,不必是代码,只是为了引导我向大方向发展。

4 个答案:

答案 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();