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

时间:2014-09-05 20:23:22

标签: javascript regex hashtag

textarea text and result console log

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;
    }
}

5 个答案:

答案 0 :(得分:11)

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

所以:

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

由此引发的:

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")

然后返回:

["#ss", "#ddd", "#sfsfsf", "#ggdg", "#hdhhd"] 

请注意,如果网址以字符(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;
    }
}

答案 1 :(得分:5)

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

yourText.split(' ').filter(v=> v.startsWith('#'))

答案 2 :(得分:3)

从字符串中获取hast标记

function getHashTag = function (tagString)
    {
      var tagListArray = [];
      var regexp = new RegExp('#([^\\s]*)', 'g');
      var tmplist = tagString.match(regexp);
      for (var w in tmplist) {
          var hashSub = tmplist[ w ].split('#');
          for (var x in hashSub) {
              if (hashSub[x] != "")
              {
                  if (hashSub[x].substr(hashSub[x].length - 1) == ":")
                  {
                      hashSub[x] = hashSub[x].slice(0, -1);
                  }
                  if (hashSub[x] != "") {
                      tagListArray.push(hashSub[x]);
                  }
              }
          }
      }
      return tagListArray;
    }

    console.log(getHashTag("#test#logic:main dummytext hello #stack:overflow"))

答案 3 :(得分:1)

将空格匹配放在前瞻中,也可以使用$

"#foo #bar #baz".match(/#[\w]+(?=\s|$)/g); // ["#foo", "#bar", "#baz"]

现在您可以更轻松地修改其余内容(即添加\w旁边的内容)以匹配任何有效的主题标签

答案 4 :(得分:0)

简单的例子。

caches.keys().then(function(names) {
    for (let name of names)
        caches.delete(name);
});