使用一些数组元素连接字符串(Javascript)

时间:2018-04-19 22:45:57

标签: javascript arrays string concatenation

如何通过连接文字字符串和数组元素

来形成字符串变量

我试过了:

var stringTing = '<a href="www.' + arr[0] + '.com/' + otherArr[0] + '"';

我试图实现的实际代码使用了这个概念:

var handles = tmpStr.match(reg);    

for (var i = 0; i < handles.length;i++) {
    tmpStr.replace(handles[i], '<a href="www.instagram.com/' + handles[i].replace('@','') + '>' + handles[i] + '</a>');
    console.log(tmpStr);
}

2 个答案:

答案 0 :(得分:2)

这种情况正在发生,因为你没有重新分配tmpStr。 tmpStr.replace不会改变tmpStr,它会返回一个新字符串。

简单地重新分配:

var handles = tmpStr.match(reg);    

for (var i = 0; i < handles.length;i++) {
    tmpStr = tmpStr.replace(handles[i], '<a href="www.instagram.com/' + handles[i].replace('@','') + '>' + handles[i] + '</a>');
    console.log(tmpStr);
}

答案 1 :(得分:2)

String#replace不会改变字符串(因为它是原始值)。它改为返回一个新字符串,因此您必须将其分配回tmpStr,这可能会导致其他问题,从而使用循环替换子字符串。

另外,为什么你匹配handlers然后再次通过字符串来替换匹配?只需一次完成(使用带有正则表达式和回调的replace),这可以保证不会导致上述问题:

tmpStr = tmpStr.replace(reg, function(match) {
    return '<a href="www.instagram.com/' + match.replace('@','') + '>' + match + '</a>';
});

注意:

为了匹配所有出现的情况,正则表达式reg应该具有全局修饰符g

<强>解释

String#replace有两种用法:一种使用字符串,另一种使用正则表达式。对于后者,您可以将其中一个作为第二个参数传递:

  • 简单字符串:,它将替换所有匹配项。仅在您不希望更改为动态时(取决于匹配项)才有用。

var str = "Hello yo! Can yo do this?";
console.log("BEFORE: " + str);

str = str.replace(/yo/g, "you");

console.log("AFTER : " + str);

  • A Special string 这是一个包含一些特殊替换模式的字符串,例如$&表示整个匹配,$n表示n < sup> th 匹配组,...这比上面的简单(静态)字符串灵活得多。

var str = "Hello yo10! Can yo50 do this? Or will yo2018 be there?";
console.log("BEFORE: " + str);

str = str.replace(/yo(\d+)/g, "'The whole match is: $&, and the number is: $1'");

console.log("AFTER : " + str);

  • A Function (callback) 这与特殊字符串类似,但不会传递带有替换模式的字符串,而是传递一个函数,该函数接受整个匹配的参数和匹配的组,替换将是此函数返回的任何内容。这提供了比特殊字符串更多的灵活性,因为你可以用匹配来做更多的逻辑。

var str = "Hello yo10! Can yo50 do this? Or will yo2018 be there?";
console.log("BEFORE: " + str);

str = str.replace(/(yo)(\d+)/g, function(wholeMatch, groupThatContainsTheYo, groupThatConatinsTheNumber) {
    var newNumber = Number(groupThatConatinsTheNumber);
    if(newNumber < 30) {
        newNumber = 0;
    } else {
        newNumber = 1;
    }

    return groupThatContainsTheYo.toUpperCase() + "-" + newNumber;
});

console.log("AFTER : " + str);

以上所有方法将分别应用于每场比赛。例如,如果有三个匹配项,则该函数将被调用三次,每次匹配一次,并且每次调用的返回值将替换当前匹配。这同样适用于特殊字符串。

示例:

var tmpStr = "Hello @world! You like @me?",
    reg = /@[a-z]+/gi;

console.log("Before: " + tmpStr);

tmpStr = tmpStr.replace(reg, function(match) {
    return '<a href="www.instagram.com/' + match.replace('@','') + '>' + match + '</a>';
});

console.log("After: " + tmpStr);