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

标签 javascript regex regex-negation

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

我要使用的字符串是“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 = 'abcbananad\nefbananaghi';

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

console.log(result);

事情是匹配 banana 并将其放回带有 $1 的结果中。当 banana 不匹配时,下一个字符(.,由于 s 标志也匹配换行符)不会在捕获中捕获组,因此不会包含在 $1 中。

注意:在支持 s 标志之前,您可以使用 [^][\S\s] 而不是 ..

关于类(class)

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

[^(?:banana)]

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

关于javascript - 如何使用正则表达式替换指定字符串以外的所有内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38132407/

相关文章:

javascript - 使用 node-xmpp 在 Node 中写入 Google CCS 服务器时出错

javascript - 如何从以纯文本形式显示的 API 中提取 JSON 数据?

javascript - 未捕获的语法错误 : Invalid regular expression flags

javascript - 选择包含数字的第一个元素 - 2014

c++ - 如何只获得给定的捕获组 <regex> C++

java - 用于在 char 'x' 之前选择最多 char before char 'y' 的正则表达式

javascript - 否定字符没有按预期工作? ^

javascript - Laravel 如何在模态上初始化日期选择器

javascript - 从 Flash AS2 调用 js 方法时遇到问题

URL 路由的正则表达式 - 匹配字母数字和破折号,但此列表中的单词除外