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

Posted

技术标签:

【中文标题】如何使用正则表达式替换除指定字符串之外的所有内容【英文标题】:How to replace everything but a specified string using regex 【发布时间】:2016-11-03 02:21:24 【问题描述】:

为此,我一直在查看***,但我没有任何运气。

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

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

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

我还有一个正则表达式,它几乎可以让我得到我正在寻找的东西,但包含字符串“banana”中的所有字符。另一个例子:

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

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

【问题讨论】:

这种替换有什么好处?为什么不只检查某个单词中banana 的出现并将该单词替换为banana 呢? 我和@RomanPerekhrest 有同样的问题。 【参考方案1】:

你可以用这个:

var test = 'abcbananadefbananaghi';

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

console.log(result);

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

你也可以使用[\S\s],而不是[^]:同样的行为。

关于课程

在您第二次尝试中使用

[^(?:banana)]

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

【讨论】:

以上是关于如何使用正则表达式替换除指定字符串之外的所有内容的主要内容,如果未能解决你的问题,请参考以下文章

Java 正则表达式,用于包装除某些给定字符之外的所有内容

正则表达式替换除大小写“0”之外的所有花括号

正则表达式 - 如何匹配除特定模式之外的所有内容

正则表达式,匹配除 \r \n 之外的所有内容作为普通字符

如何使用正则表达式选择除捕获组之外的所有内容?

正则表达式:允许除某些选定字符之外的所有内容[重复]