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

问题描述 投票:1回答:5

The javascript code:

如何在没有换行符或空格或标签的情况下找到没有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;
    }
}
javascript regex hashtag
5个回答
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;
    }
}

这样调用的是:

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

5
投票

如果您关心可读性,只需:

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

3
投票

从字符串中获取#标签

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

2
投票

把空间比赛放在前瞻,也许与$

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

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


0
投票

简单的例子。

<html>
<head>
    <script>
        function showTags(){
          var text = document.getElementById("text").value;
          var result = text.split(' ').filter(v=> v.startsWith('#'));
          document.getElementById("result").innerHTML = result;
        }
    </script>
</head>
<body>
    <h1>Enter text or paragraph</h1>

    <textarea type="text" id="text"></textarea><br>
    <button onclick="showTags()">Get Hashtags</button><br><br>
    <div id="result"></div>
</body>

© www.soinside.com 2019 - 2024. All rights reserved.