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

9

我在stackoverflow上寻找相关内容,但没有找到匹配的结果。

我要处理的字符串是“xbananay”,其中'x'和'y'可以是任意长度的字母或数字的任意组合。因此,我的字符串可能只是“qrstbananag”,但也可能是“abcbanana12345”。

我想要使用Javascript的replace函数替换除“banana”之外的所有内容,且能使用该函数。我已经有了一些正则表达式可以找到“banana”,但是replace函数会替换我正在寻找的内容,而我想要查找其他所有内容。例如:

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

我还有一个正则表达式,几乎可以得到我要找的内容,但包括了字符串“banana”中的所有字符。另一个例子:

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

我该如何使用 replace 函数来完成这个任务?谢谢。

4
这种替换的好处是什么?为什么不仅检查某个单词中是否出现了“香蕉”,然后将该单词替换为“香蕉”呢? - RomanPerekhrest
我和@RomanPerekhrest有同样的问题。 - conner.xyz
1个回答

18

您可以使用以下内容:

var test = 'abcbananad\nefbananaghi';

var result = test.replace(/(banana)|./gs, '$1');

console.log(result);

需要匹配 banana 并将其重新放入结果中,使用 $1。当 banana 不匹配时,下一个字符 (., 由于 s 标志也匹配换行符) 不会被捕获到一个捕获组中,因此不会被包含在 $1 中。

注:在支持 s 标志之前,可以使用 [^][\S\s] 替代 .

关于类

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

[^(?:banana)]

请注意,类中的字符(位于[...]之间)比通常更加字面。因此,(?:被视为三个单独的字符,banana中的字符也是如此。事实上,您要说的是:删除不是这些任何字符之一的任何字符:()?:abn


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接