将花括号和其中的文本替换为Node。

9

我有一个字符串

var str="Hello my name is {john/www.john.com} and welcome to my {site/www.site.com}."

我已提取花括号并将其制成锚标签,例如:
<a href="www.john.com">john</a>

我想要做的是用这些节点替换花括号和其中的内容。是否可以使用正则表达式?我已经在MDN上学习了正则表达式,但仍然无法找到方法。
1个回答

16
当然是的:

var str = "Hello my name is {john/www.john.com} and welcome to my {site/www.site.com}.";

str = str.replace(/\{(.+?)\/(.+?)\}/g, function(m, label, url) {
    return '<a href="http://' + url + '">' + label + '</a>';
});

document.write(str);

正则表达式为:

\{(.+?)\/(.+?)\}
  • \{ 匹配 {
  • (.+?) 匹配并捕获任何字符(尽可能少的字符,因此是第一个/之前的部分)
  • \/ 匹配 /
  • (.+?) 匹配并捕获任何字符直到 }
  • \} 匹配 }

这是非常好的答案。但我想问一下你传递的匿名函数作为回调函数。它是如何提取名称/ URL 参数的?我从来没有在正则表达式中看到过这样的东西。 - Darlyn
1
@trolkura 当你将回调函数传递给 replace 函数时,第一个参数始终是匹配项(这里是 m)。接下来的参数是可变参数,等于 m[1]m[2] 等等,这是为了方便。我本可以使用 m[1] 代替 label,使用 m[2] 代替 url,但是使用可变参数并给它们命名可以使代码更易读。 - Lucas Trzesniewski

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接