如何使用正则表达式替换指定字符串以外的所有内容

How to replace everything but a specified string using regex

为此,我一直在 Whosebug 中查找,但我没有任何运气。

我要使用的字符串是 "xbananay",其中 'x' 和 'y' 可以是任意长度的字母或数字的任意组合。所以我的字符串可以只是 "qrstbananag",但也可以是 "abcbanana12345"。

我想使用,并且只使用,javascript 的替换功能来替换除 "banana" 以外的所有内容。我已经有一些可以找到香蕉的正则表达式,但是当我想找到其他所有东西时,替换功能将按预期替换我正在寻找的东西。示例:

var fullString = "qrstbananag"
var strippedBanana = fullString.replace(/(?:banana)/g, ''); //returns qrstg

我还有一个正则表达式,它几乎可以满足我的要求,但包含字符串 "banana" 中的所有字符。另一个例子:

var fullString2 = "abcbanana12345"
var strippedBanana = fullString2.replace(/[^(?:banana)]/g, ''); //returns abbanana

我如何仅使用替换功能来完成此操作?提前致谢。

你可以使用这个:

var test = 'abcbananadefbananaghi';

var result = test.replace(/(banana)|[^]/g, '');

console.log(result);

事情是匹配banana并把它放回与</code>的结果中。当 <em>banana</em> 不匹配时,下一个字符(<code>[^],也匹配换行符)不会在捕获组中捕获,因此不会包含在 </code>.</p> <p>您也可以使用 <code>[\S\s] 而不是 [^]:相同的行为。

关于 classes

在第二次尝试中,您使用了

[^(?:banana)]

但请注意 class 中的字符(在 [...] 之间)比其他情况下更注重字面意义。所以(?:被当作三个独立的字符,banana的字符也是如此。您实际上是在说:删除不属于以下任何字符的任何字符:()?:abn.