从带有修剪空格和新行的字符串中获取主题标签

Ahm*_*thi 1 javascript regex hashtag

textarea文本和结果控制台日志

javascript代码:

如何在没有换行符或空格或标签的情况下找到没有url标签的主题标签?

function findHashtags(searchText) {
    var regexp = /\#\w\w+\s?/g
    result = searchText.match(regexp);
    if (result) {
        result.map(function(s) { return s.trim() });
        console.log(result);
    } else {
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

Fra*_*Man 11

使用\b而不是\s?- 字边界而不是额外的空格来捕获空格.使用\B(不是单词边界)将您的url主题标签与以单词字符结尾的网址分开.

所以:

function findHashtags(searchText) {
    var regexp = /\B\#\w\w+\b/g
    result = searchText.match(regexp);
    if (result) {
        console.log(result);
    } else {
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

这样调用的是:

findHashtags("http://www.masrawy.com/Sports/Sports_News/details/2014/9/5/338281#HPOFEATURE\n#ss\nddd\n#ddd jaaja ksks #sfsfsf\n#ggdg#hdhhd")
Run Code Online (Sandbox Code Playgroud)

然后返回:

["#ss", "#ddd", "#sfsfsf", "#ggdg", "#hdhhd"] 
Run Code Online (Sandbox Code Playgroud)

请注意,如果url以字符(a-z0-9_)结尾,则会失败.除此之外唯一的选择是捕获并更有效地修剪空白:

function findHashtags(searchText) {
    var regexp = /(\s|^)\#\w\w+\b/gm
    result = searchText.match(regexp);
    if (result) {
        result = result.map(function(s){ return s.trim();});
        console.log(result);
        return result;
    } else {
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)


Sag*_*fek 5

如果您只关心可读性,请执行以下操作:

yourText.split(' ').filter(v=> v.startsWith('#'))
Run Code Online (Sandbox Code Playgroud)

  • 那这个呢?`yourText.split(/\s/gm).filter((s) => s.startsWith('#'))` (3认同)
  • 在其他答案中,它不仅更具可读性,而且比 regex 方式快得多。我在一个带有大约 20 个哈希标签的大字符串上为两者计时。对于相同的结果,平均正则表达式时间:0.250 毫秒,此解决方案的平均时间:0.100 毫秒。绝对是更好的解决方案! (2认同)