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

时间:2016-06-30 20:11:53

标签: javascript regex regex-negation

为此,我一直在浏览和查看stackoverflow,但我没有运气。

我想要使用的字符串是" xbananay",其中' x'并且' y'可以是任意长度的字母或数字的任意随机组合。所以我的字符串可能只是" qrstbananag",但它也可能是" abcbanana12345"例如。

我想使用并且仅使用,javascript的替换功能来替换所有内容但是" banana"。我已经有了一些可以找到香蕉的正则表达式,但是当我想要找到其他所有内容时,替换函数将会取代我想要的内容。例如:

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

我还有一个正则表达式,表示ALMOST可以获取我想要的内容,但包含字符串中的所有字符" banana"。另一个例子:

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

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

1 个答案:

答案 0 :(得分:10)

你可以用这个:

var test = 'abcbananadefbananaghi';

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

console.log(result);

要匹配 banana 并将其放回$1的结果中。当 banana 不匹配时,下一个字符([^],也匹配换行符)不会在捕获组中捕获,因此不会包含在$1

您可以使用[^]代替[\S\s]:同样的行为。

关于班级

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

[^(?:banana)]

但请注意,类中的字符([...]之间)的字面处理比其他情况更严格。因此,(?:被视为三个单独的字符,banana的字符也是如此。你实际上在说:删除任何不属于这些字符的字符:()?:abn