如何搜索任何和所有的散列标签(字母、数字、下划线和连字符)的文本,并将它们包装在span标记(如搜索)中。
some_string = "this is some text with 3 hashtags #Tag1 and #tag-2 and #tag_3 in it"并将其转换为:
"this is some text with 3 hashtags <span>#Tag1</span> and <span>#tag-2</span> and <span>#tag_3</span> in it"到目前为止,我有这样的想法:
some_string = some_string.replace(/\(#([a-z0-9\-\_]*)/i,"<span>$1</span>");但一个缺点是它没有像它应该的那样将#包含在包装中。它似乎产生了以下结果:
"this is some text with 3 hashtags <span>Tag1</span> and #tag-2 and #tag_3 in it "此外,它只检测到它遇到的第一个标签(例如。在这个示例中,它应该检测到所有的#Tag1。
此外,我需要的哈希标签是最少一个字符后的#。所以它本身就不应该匹配。
谢谢
发布于 2013-07-25 17:17:07
尝试以下替换调用:
编辑:如果您想跳过http://site.com/#tag类型的字符串,那么使用:
var repl = some_string.replace(/(^|\W)(#[a-z\d][\w-]*)/ig, '$1<span>$2</span>');发布于 2013-07-25 17:21:12
这是您想要的正则表达式:
/(#[a-z0-9][a-z0-9\-_]*)/igi使得它不区分大小写,这一点您已经有了。但是g会让它查看整个字符串("g“表示”全局“)。如果没有g,匹配将在第一次匹配时停止。
这还包括一个用于删除不正确的括号和一些不必要的反斜杠的修复。
发布于 2017-01-02 01:05:18
如果您不想与http://site/#hashs匹配,请使用这个*
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或#-wordwor#d你想要的和不想匹配的东西在不同的情况下可能会有所不同。
在regex101自己试一试。
* @anubhava发布的当前已被接受的答案声称跳过url散列,但没有做到。
https://stackoverflow.com/questions/17864482
复制相似问题