Instagram的regEx无法按预期工作

时间:2015-08-12 12:35:06

标签: javascript jquery regex

我有一个javascript应该检测主题标签和提及并替换它们。我正在使用这个库:https://github.com/AnSavvides/jquery.linky

function _linkifyHashtags(text, links) {
    // If there is no search URL for a hashtag, there isn't much we can do
    if (links.hashtagSearchUrl === null) return text;
    return text.replace(/(^|\s|\(|>)#((\w|[\u00A1-\uFFFF])+)/g, "$1<a href='" + links.baseUrl + links.hashtagSearchUrl + "$2' target='_blank'>#$2</a> ");
}

此代码的问题在于,只有在使用空格写入主题标签之前,regEx才有效(例如:“#hi #hello #lo”)

如果之前写的主题标签没有空格,就像这个“#hi#hello #lo”一样,脚本没有检测到主题标签。

我之前尝试过添加可能的非白色字符:

/(^|\s|\S|\(|>)#((\w|[\u00A1-\uFFFF])+)/

它“半途而废”。突然之前,脚本会检测到之前没有空格的每个第二个#标签。

我不是RegEx的专家,并试图阅读这个,但我不知道如何让这部分正确。谁知道?

3 个答案:

答案 0 :(得分:3)

只需删除标签前面的内容限制,因为现在没有任何内容也是有效的选择。

/#((\w|[\u00A1-\uFFFF])+)/g

您还应该相应地从替换中删除它,将其简化为:

return text.replace(/#((\w|[\u00A1-\uFFFF])+)/g, "<a href='" + links.baseUrl + links.hashtagSearchUrl + "$1' target='_blank'>#$1</a> ");

答案 1 :(得分:2)

试试这个:

/(^|\s?|\(|>)#((\w|[\u00A1-\uFFFF])+)/

?在\ s捕获0或1个空格后。

答案 2 :(得分:0)

嘿试试这个正则表达式。

/(\s|\w)*[\#][\w]*/g

Regex fiddle