我试图找到一个正则表达式,当字符串前面没有另一个特定字符串时(在我的例子中,当它前面没有“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岩石”,自然。
有人可以帮忙吗?感觉就像我尝试了以前答案中找到的所有内容,但没有任何效果。谢谢!
由于 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'));
JSFiddle.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)