gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 02:40:46 24 4
gpt4 key购买 nike

我正在努力处理 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com