如何通过连接文字字符串和数组元素
来形成字符串变量我试过了:
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);
}
答案 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);
$&
表示整个匹配,$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);
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);