首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaScript regex,搜索hashtag

JavaScript regex,搜索hashtag
EN

Stack Overflow用户
提问于 2013-07-25 17:10:25
回答 4查看 10.7K关注 0票数 4

如何搜索任何和所有的散列标签(字母、数字、下划线和连字符)的文本,并将它们包装在span标记(如搜索)中。

代码语言:javascript
复制
some_string = "this is some text with 3 hashtags #Tag1 and #tag-2 and #tag_3 in it"

并将其转换为:

代码语言:javascript
复制
"this is some text with 3 hashtags <span>#Tag1</span> and <span>#tag-2</span> and <span>#tag_3</span> in it"

到目前为止,我有这样的想法:

代码语言:javascript
复制
    some_string = some_string.replace(/\(#([a-z0-9\-\_]*)/i,"<span>$1</span>");

但一个缺点是它没有像它应该的那样将#包含在包装中。它似乎产生了以下结果:

代码语言:javascript
复制
"this is some text with 3 hashtags <span>Tag1</span> and #tag-2 and #tag_3 in it "

此外,它只检测到它遇到的第一个标签(例如。在这个示例中,它应该检测到所有的#Tag1

此外,我需要的哈希标签是最少一个字符后的#。所以它本身就不应该匹配。

谢谢

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-07-25 17:17:07

尝试以下替换调用:

编辑:如果您想跳过http://site.com/#tag类型的字符串,那么使用:

代码语言:javascript
复制
var repl = some_string.replace(/(^|\W)(#[a-z\d][\w-]*)/ig, '$1<span>$2</span>');
票数 10
EN

Stack Overflow用户

发布于 2013-07-25 17:21:12

这是您想要的正则表达式:

代码语言:javascript
复制
/(#[a-z0-9][a-z0-9\-_]*)/ig

i使得它不区分大小写,这一点您已经有了。但是g会让它查看整个字符串("g“表示”全局“)。如果没有g,匹配将在第一次匹配时停止。

这还包括一个用于删除不正确的括号和一些不必要的反斜杠的修复。

票数 5
EN

Stack Overflow用户

发布于 2017-01-02 01:05:18

如果您不想与http://site/#hashs匹配,请使用这个*

代码语言:javascript
复制
string.replace(/(^|\s)#[a-zA-Z0-9][\w-]*\b/g, "$1<span>$2</span>");

它将匹配:

  • #word
  • #word_1#word-1
  • #word in #word?#word"#word.#word,

它不相配

  • "#word,#word.#word
  • /#word
  • #_word#-word
  • wor#d

你想要的和不想匹配的东西在不同的情况下可能会有所不同。

regex101自己试一试。

* @anubhava发布的当前已被接受的答案声称跳过url散列,但没有做到。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17864482

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档