首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >javascript如何在hashtag上重新匹配和替换,但不包含hashtag字符

javascript如何在hashtag上重新匹配和替换,但不包含hashtag字符
EN

Stack Overflow用户
提问于 2019-10-28 02:46:30
回答 3查看 132关注 0票数 2

我的职能如下:

代码语言:javascript
复制
function formattedTitle(posttitle,hreflink) {
  return `<a href='`+ hreflink +`'>` + posttitle.replace(/(^|\s)(#[-.\w]+)/gi, `$1</a><a class="hashtag" href='/search?q=hashtag:"$2"'>$2</a><a href='`+ hreflink + `'>`) + '</a>';
}

当我跑的时候

代码语言:javascript
复制
console.log(formattedTitle('This is #awesome news','google.com'));

它的产出如下:

代码语言:javascript
复制
<a href='google.com'>This is </a><a class="hashtag" href='/search?q=hashtag:"#awesome"'>#awesome</a><a href='google.com'> news</a>

代码语言:javascript
复制
function formattedTitle(posttitle, hreflink) {
  return `<a href='` + hreflink + `'>` + posttitle.replace(/(^|\s)(#[-.\w]+)/gi, `$1</a><a class="hashtag" href='/search?q=hashtag:"$2"'>$2</a><a href='` + hreflink + `'>`) + '</a>';
}


console.log(formattedTitle('This is #awesome news', 'google.com'));

注意它是如何包含$2匹配中的"#“的。如何排除hashtag:属性中的hashtag字符,但将其保留在href值之间?

因此输出应该如下所示:

代码语言:javascript
复制
<a href='google.com'>This is </a><a class="hashtag" href='/search?q=hashtag:"awesome"'>#awesome</a><a href='google.com'> news</a>

我已经能够通过在整个事情上进行另一个替换来用'/search?q=hashtag:"#替换'/search?q=hashtag:",但是我想知道没有第二个替换是否可能?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-10-28 02:52:54

#移出被捕获的第二组,这样它就不会被捕获。当替换时,在href中,用$2替换(所以不使用hashtag)。当替换<a>中的文本时,用#$2替换,这样就可以在适当的位置添加hashtag:

代码语言:javascript
复制
function formattedTitle(posttitle, hreflink) {
  return `<a href='` + hreflink + `'>`
    + posttitle.replace(/(^|\s)#([-.\w]+)/gi, `$1</a><a class="hashtag" href='/search?q=hashtag:"$2"'>#$2</a><a href='` + hreflink + `'>`)
    + '</a>';
}

console.log(formattedTitle('This is #awesome news', 'google.com'));

票数 2
EN

Stack Overflow用户

发布于 2019-10-28 02:53:43

您只需要将哈希符号移出捕获组;这样做不会更改匹配的语义。就像这样:

代码语言:javascript
复制
function formattedTitle(posttitle, hreflink) {
  return `<a href='`+ hreflink +`'>` + posttitle.replace(/(^|\s)#([-.\w]+)/gi, `$1</a><a class="hashtag" href='/search?q=hashtag:"$2"'>$2</a><a href='`+ hreflink + `'>`) + '</a>';
}
票数 1
EN

Stack Overflow用户

发布于 2019-10-28 02:54:01

只需添加另一个捕获组,就可以在$2中获得与哈希标记(或任何其他想要捕获的字符)的匹配,并在$3(#([-.\w]+))而不是(#[-.\w]+)中添加另一个没有hashtag的匹配

代码语言:javascript
复制
function formattedTitle(postTitle, href) {
  const parts = postTitle.replace(
    /(^|\s)(#([-.\w]+))/gi,
    `$1</a><a class="hashtag" href="/search?q=hashtag:$3">$2</a><a href="${ href }">`);
  
  return `<a href="${ href }">${ parts }</a>`;
}

document.getElementById('postTitle').innerHTML = formattedTitle('This is #awesome news', 'https://google.com');
代码语言:javascript
复制
h3 {
  font-family: monospace;
  font-size: 24px;
  margin: 8px 0;
}

a {
  padding: 8px 0;
  text-decoration: none;
  display: inline-block;
}

.hashtag {
  padding: 6px 8px;
  border: 3px solid blue;
  border-radius: 3px;
  margin: 0 8px;
}
代码语言:javascript
复制
<h3 id="postTitle"></h3>

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58585221

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档