我有一个类似 Hello @William Turner. how are you?
的字符串并想替换术语 @William Turner.
通过<a href="www.williamturner.com">@William Turner.</a>
因此,结果字符串将是 Hello <a href="www.williamturner.com">@William Turner.</a> how are you?
我尝试使用下面的代码来做到这一点:
var text = "Hello @William Turner. how are you?";
var username = "William Turner.";
var user_profile_html = "<a href="www.williamturner.com">@William Turner.</a>";
var regex = new RegExp("\\@" + username + "\\b", "g");
text = text.replace(regex, user_profile_html);
当 username
时工作正常没有像 William, John
这样的空间等等
请分享您的知识,我该如何实现它?
--------------------编辑--------------------
我在上面的代码中提到的正则表达式工作正常,正如 @hallleron 发布的答案。
但是,我忘记提到要替换的术语有特殊字符,例如 .
所以就变成了William Truner.
我使用并由 @hallleron 提到的正则表达式对于没有特殊字符的术语工作得很好。
正如 @DimitrisDamilos 在评论中提到的,我正在寻找 regexr.com也是如此。
最佳答案
实际上您的代码没问题,但 user_profile_html
变量的字符串内也有 "
,这是错误的,请替换为 '
。
这是一个具有两种方法的工作 fiddle :
// METHOD 1:
var string = "Hello @William Turner how are you?"
var username = "William Turner";
var result = string.replace('@' + username, '<a href="www.williamturner.com">@' + username + '</a>');
console.log(result);
// METHOD 2:
var text = "Hello @William Turner how are you?";
var username = "William Turner";
var user_profile_html = '<a href="www.williamturner.com">@William Turner</a>';
var regex = new RegExp("\\@" + username + "\\b", "g");
text = text.replace(regex, user_profile_html);
console.log(text);
关于JavaScript 正则表达式 : Replace spaced substring from the string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45591222/