来自推文的示例数据:
我总是在#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))

我将返回
我总是在我们总是开放的网站见面
感谢。
答案 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个或更多非空白/非单词字符。