在两个字符串中替换子字符串

时间:2016-08-31 19:01:42

标签: javascript

我有以下2个字符串,我想用另一个单词替换单词的出现。这是一个例子:

new content:
1 best thing ever
2 [thing i dont want]
3 [thing i dont want] best thing ever
4 // best thing ever
5 best thing ever  // best thing ever

在这里,我想用适当的模板替换每个星号。

5 个答案:

答案 0 :(得分:2)

你可以使用这个ES6函数,使用replace回调参数:



function solution (str1, str2) {
    var replacements = str1.match(/\{\{.*?\}\}/g);
    return str2.replace(/\*/g, match => replacements.shift() || '');
}

// test case
var str1 = 'My name is {{ firstName }} {{ lastName }}';
var str2 = 'Me llamo * *';
// match
var result = solution(str1, str2);
// output
console.log(result);




没有双支撑计数器部分的星号只是被删除。

答案 1 :(得分:1)

您可以使用正则表达式来获取所有变量,并将每个*替换为每个索引处的变量:



var target = 'My name is {{ firstName }} {{ lastName }}';
var translation = 'Me llamo * *';

function translate(from, to) {
    var interpolations = from.match(/(\{\{([\w\s]+)\}\})/g);
    return to.replace(/\*/g, function(matches) {
       return interpolations.shift()
    })
}

console.log(translate(target, translation));




答案 2 :(得分:0)

如果两个字符串总是像你的例子那样,那么:



var str1 = 'My name is {{ firstName }} {{ lastName }}'
var str2 = 'Me llamo * *'

var result = solution(str1, str2)

console.log(result)
console.log(result == 'Me llamo {{ firstName }} {{ lastName }}')

function solution(str1, str2){
  return str2.substr(0, str2.length-3) + str1.substr('My name is '.length)
}
     




答案 3 :(得分:0)

您可以使用Array.prototype.replace功能执行此操作。

var str1 = 'My name is {{ firstName }} {{ lastName }}';
var str2 = 'Me llamo * *';

var result = solution(str1, str2);

console.log(result);

function solution(str1, str2){
    str1 = str1.match(/\{\{.*?\}\}/g);
    return str2.replace(/\*/g, () => str1.shift());
}

但是,我认为从字符串中删除{{}}标记会更有用。您可以按照以下方式实现:

function solution(str1, str2){
    str1 = str1.match(/\{\{.*?\}\}/g).map(m => m.match(/\{\{\s(.*)\s\}\}/)[1]);
    return str2.replace(/\*/g, () => str1.shift());
}

答案 4 :(得分:0)

一个迭代且缩写较少(但可能较慢)的版本,它更能容忍*或{{}}数量不匹配:



var solution = function(s1, s2) {
  var myRegexp = /(\{\{.*?\}\})/g;
  var match = myRegexp.exec(s1);
  while (match != null && s2.indexOf('*')!== -1) {
    s2 = s2.replace('*', match[1]);
    match = myRegexp.exec(s1);
  };
  return s2;
};


var str1 = 'My name is {{ firstName }} {{ lastName }}';
var str2 = 'Me llamo *  *';

var result = solution(str1, str2);
console.log(result);