javascript - 使用正则表达式匹配哈希值,但当它们是 url 的一部分时则不匹配

标签 javascript regex

我正在努力处理 javascript 中的正则表达式,它需要 # 之后的文本到第一个单词边界,但如果它是 url 的一部分,则不匹配它。所以

#test - 应匹配测试
sometext#test2 - 应该匹配 test2
xx moretext#test3 - 应匹配 test3
http://test.com#tab1 - 不应匹配 tab1

我用链接替换散列后面的文本(但不是散列字符本身)。文本中可以有多个哈希值,并且它应该与所有哈希值匹配(我想我应该使用/g 来实现这一点)。

匹配哈希后面的部分非常容易:/#\b(.+?)\b/g,但如果字符串本身以“http”开头则不匹配它是我无法解决的问题。我可能应该使用消极的环视,但我在理解这一点时遇到了问题。

非常感谢任何帮助!

最佳答案

尝试使用负向前看这个正则表达式,因为 JS 不支持向后查找:

/^(?!http:\/\/).*#\b(.+?)\b/

您可能还想检查 www,具体取决于您的情况。

编辑:然后你可以这样做:

str = str.replace(re.exec(str)[1], 'replaced!');

http://jsfiddle.net/j7c79/2/

编辑 2: 有时,如果它变得太复杂,仅使用正则表达式并不是可行的方法。尝试不同的方法:

var txt = "asdfgh http://asdf#test1 #test2 woot#test3";

function replaceHashWords(str, rep) {
  var isUrl = /^http/.test(str), result = [];
  !isUrl && str.replace(/#\b(.+?)\b/g, function(a,b){ result.push(b); });
  return str.replace((new RegExp('('+ result.join('|') +')','g')), rep);
}

alert(replaceHashWords(txt, 'replaced!')); 
// asdfgh http://asdf#replaced! #replaced! woot#replaced!

关于javascript - 使用正则表达式匹配哈希值,但当它们是 url 的一部分时则不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12680596/

相关文章:

javascript - 如何将订阅放入 RxJS 或 Angular2 中 Observables 的过滤器中?

javascript - 在 Extjs 中删除 GridPanel 的 headertoolbar

python - 具有 5 个数字或 IND/5 个数字的字符串的正则表达式

python - Python 的 re.compile 需要与 re.search 不同的语法吗?

regex - Ansible:ios 升级路由器:在镜像复制之前检查 "spacefree_kb"

javascript - 突出显示动态创建的行

javascript - 如何检查客户端(机器人)的最高角色位置

javascript - AngularJS调用json文件的方法

php - 在 PHP 中用标签链接替换单词

python - 查找字符后的所有数字,以逗号分隔