我正在努力处理 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!');
编辑 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/