正则表达式匹配数据推文中的hastag,提及,url和特殊字符

时间:2017-06-13 19:15:22

标签: javascript regex twitter match

来自推文的示例数据:

我总是在#kampus见到@gEmbul我们总是打开网站https://www.youtube.com/ facebook#:) @ 007

日期是字符串,我希望匹配提及符号@,hastag符号#,任何网址和特殊字符。

我会在hastag和hastag之后匹配hastag#

这是我的代码



var data = "I always meet @gEmbul at #kampus we always open the site https://www.youtube.com/ facebook# :) @007"
function clean(data) {
	data = data.replace(/(?:https?|ftp):\/\/[\n\S]+/g, '')
      .replace(/\B\@\w\w+\b/g, '')
      .replace(/\B\#\w\w+\b/g, '');
	return data;
}
console.log(clean(data))




我将返回

我总是在我们总是开放的网站见面

感谢。

1 个答案:

答案 0 :(得分:1)

我建议稍微缩小模式(2个正则表达式只有1个字符,而且可以使用[#@]字符类来完成,并且由于删除了匹配项,因此可以将正则表达式与|交替运算符):

var data = "I always meet @gEmbul at #kampus we always open the site https://www.youtube.com/ facebook# :) @007"
function clean(data) {
	data = data.replace(/(?:https?|ftp):\/\/[\n\S]+|\B[@#]\w+\b|\b\w+[@#]\B|\B[^\w\s]{2,}\B/g, '');
	return data;
}
document.body.innerHTML = clean(data);

<强>详情:

  • (?:https?|ftp):\/\/[\n\S]+ - 与可能跨越换行符的网址匹配的正则表达式
  • | - 或
  • \B[@#]\w+\b - @#后跟1个字词(整个单词)
  • | - 或
  • \b\w+[@#]\B - 1个单词字符后跟@#(整个单词)
  • | - 或
  • \B[^\w\s]{2,}\B - 非字边界,除了字和空格之外的2个或更多个字符,以及非字边界。删除\B以匹配任何上下文中的2个或更多非空白/非单词字符。