Javascript:查找字符串中的所有提及内容并对其进行替换

时间:2018-08-08 17:30:47

标签: javascript regex

我想在评论中找到所有@提及的事件,然后将其替换为其他格式。

我有这个正则表达式来对所有出现进行分组,但是所有这点我都必须为jira([〜string])操纵这个字符串,并将它们重新插入到原始字符串中。

comment.match(/[ ]@[^\s]+/g);

有更好的方法吗?

已输入评论:

  

guiyjhk @test hgjhgjh test@this_is.test2 jhgjhgjh @ this_is.test2

这是我要返回的内容:

  

guiyjhk [〜test] hgjhgjh test@this_is.test2 jhgjhgjh [〜this_is.test2]

2 个答案:

答案 0 :(得分:2)

您可以使用正则表达式来匹配@之后的部分和之前的空格,并使用replace()替换那些匹配项。这样一来,您就可以匹配@mention并用空格包围,同时避免使用test@this_is.test2

let comment = "guiyjhk @test hgjhgjh test@this_is.test2 jhgjhgjh @this_is.test2"

// catch space then @ then non-space replace with space(s)[non-space]
comment = comment.replace(/([\s+])@([^\s]+)/g, "$1[~$2]");
console.log(comment)

答案 1 :(得分:0)

您可以捕获零次或多次空白,或断言第1组中字符串的开头,匹配@,然后在非空白\S+组中捕获

(^|\s+)@(\S+)

然后在替换使用组1和2 $1[~$2]

const strings = [
  "guiyjhk @test hgjhgjh test@this_is.test2 jhgjhgjh @this_is.test2",
  "@test"
];
strings.forEach((s) => {
  console.log(s.replace(/@(\S+)/g, "[~$1]"));
});