function assert() {
document.write.apply(document, arguments);
}
var testLink = "google.com";
function makeIntoLink(link) {
if (link.match(/^[a-zA-Z0-9]+(.com)/)) {
link.replace(link, "<a href=\"http://www." + link+ "\">" + link + "<\/a>");
}
return link;
}
assert(makeIntoLink(testLink));
它写下来但不是链接形式。只是“google.com”没有链接。什么可能出错?
答案 0 :(得分:1)
link.replace
不会原位更改文本,而是创建一个新字符串。尝试将行从link.replace(link...
更改为link = link.replace(link..
。
答案 1 :(得分:1)
像link.replace
这样的函数实际上并没有替换字符串中的内容,它实际上返回了一个带有替换的NEW字符串。例如:
function replaceText() {
var searchText = ".com";
var link = "google.com";
var newLink = link.replace(searchText, ".co.uk");
alert(link); // Output = "google.com"
alert(newLink); // Output = "google.co.uk"
}
在您的情况下,您根本不需要使用string.replace(...)
,而是可以这样做:
function makeIntoLink(link) {
if (link.match(/^[a-zA-Z0-9]+(.com)/)) {
//link.replace(link, "<a href=\"http://www." + link+ "\">" + link + "<\/a>"); <-- OLD
link = "<a href=\"http://www." + link+ "\">" + link + "<\/a>"; // <-- NEW
}
return link;
}
答案 2 :(得分:0)
replace
返回字符串的版本,并替换为;字符串不是原位替换的。所以link = link.replace...
而不仅仅是link.replace
。
答案 3 :(得分:0)
正如其他人所说,replace
不会更改变量,只会返回一个新变量。但在这种情况下,你真的不想替换某些东西,你只想连接一些东西。
IMO,您不需要replace
功能:
function makeIntoLink(link) {
if (link.match(/^[a-zA-Z0-9]+(.com)/)) {
link = '<a href="http://www.' + link + '">' + link + '</a>';
}
return link;
}
(我还通过对JS字符串文字和HTML属性使用不同的引号字符来删除\"
转义。这使得它更难以阅读,恕我直言。