我正在尝试找到一个正则表达式,当它不在另一个特定字符串之前时会匹配一个字符串(在我的情况下,当它不在“http://”之前)时。这是在 JavaScript 中,我在Chrome上运行(不是它应该重要)。
示例代码为:
var str = 'http://www.stackoverflow.com www.stackoverflow.com';
alert(str.replace(new RegExp('SOMETHING','g'),'rocks'));
我想用正则表达式替换SOMETHING,这意味着“匹配www.stackoverflow.com,除非它之前是http://”。然后警报应该自然地说“http://www.stackoverflow.com岩石”。
有人可以帮忙吗?感觉就像我尝试了以前的答案中找到的一切,但没有任何作用。谢谢!
答案 0 :(得分:4)
由于JavaScript正则表达式引擎不支持' lookbehind'断言,它不可能与普通的正则表达式有关。不过,还有一个解决方法,涉及replace
回调函数:
var str = "As http://JavaScript regex engines don't support `lookbehind`, it's not possible to do with plain regex. Still, there's a workaround";
var adjusted = str.replace(/\S+/g, function(match) {
return match.slice(0, 7) === 'http://'
? match
: 'rocks'
});
console.log(adjusted);
您实际上可以为这些功能创建一个生成器:
var replaceIfNotPrecededBy = function(notPrecededBy, replacement) {
return function(match) {
return match.slice(0, notPrecededBy.length) === notPrecededBy
? match
: replacement;
}
};
...然后在replace
中使用它:
var adjusted = str.replace(/\S+/g, replaceIfNotPrecededBy('http://', 'rocks'));
答案 1 :(得分:0)
这也有效:
var variable = 'http://www.example.com www.example.com';
alert(variable.replace(new RegExp('([^(http:\/\/)|(https:\/\/)])(www.example.com)','g'),'$1rocks'));
警报说“http://www.example.com岩石”。