[英]Regular expression(javascript) to extract a string preceded by some constant string
[英]Regular Expression - Match String Not Preceded by Another String (JavaScript)
我试图找到一个正则表达式,当它前面没有另一个特定字符串时(在我的例子中,当它前面没有“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 Rocks”。
任何人都可以帮忙吗? 感觉就像我尝试了以前答案中的所有内容,但没有任何效果。 谢谢!
由于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'));
JS小提琴 。
这也有效:
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 rocks”。
Raina77ow 的回答反映了 2013 年的情况,但现在已经过时了,因为关于后向断言的提议<\/a>在 2018 年被 ECMAScript 规范接受。<\/strong>
人物<\/th> 意义<\/th><\/tr><\/thead> (?<!y)x<\/code><\/td>
否定后向断言:<\/strong>仅当“x”前面没有“y”时才匹配“x”。 例如,
\/(?<!-)\\d+\/<\/code>仅匹配前面没有减号的数字。
\/(?<!-)\\d+\/.exec('3')<\/code>匹配“3”。
\/(?<!-)\\d+\/.exec('-3')<\/code>匹配未找到,因为数字前面有减号。
<\/td><\/tr><\/tbody><\/table><\/blockquote>
因此,您现在可以将“匹配
www.stackoverflow.com<\/code>除非它前面有
http:\/\/<\/code> ”表示为
\/(?<!http:\\\/\\\/)www.stackoverflow.com\/<\/code> :
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.