从正则表达式中删除子字符串之间的字符串

Remove String Between Substring from RegExp

我写这段代码是为了将字符串从 'a' 删除到 'c'

var str = "abcbbabbabcd";
var re = new RegExp("a.*?c","gi");
str = str.replace(re,"");
console.log(str);

控制台的结果是"bbd"

但适合我的结果是 "bbabbd"

我可以使用正则表达式来解决这个问题吗?

感谢帮助。

您需要将正则表达式更新为 a[^ac]*?c ,这将避免字符 acac

var str = "abcbbabbabcd";
var re = new RegExp("a[^ac]*?c","gi");
str = str.replace(re,"");
console.log(str);

a(?:(?!a).)*c

使用基于 lookahead 的 regex.See 演示。.*? 将在第一个 a 之后消耗 a。要停止它,请使用 lookahead.

https://regex101.com/r/cJ6zQ3/34

编辑:

a[^a]*c

你实际上可以使用 negated character class 因为你只有 1 个字符。

g 表示它是一个全局正则表达式,这意味着它会同时获取字符串中的 abcabbabc。所以这确实正确地从 a..c 中删除了项目。您似乎只看到了两个 abc 而错过了 abbabc。结果 bbd 实际上是正确的,因为它确实 "remove string from 'a' to 'c'".

abcbbabbabcd => bbd

还有一种方法。

var str = "abcbbabbabcd";
var str= str.replace(/abc/g, ""); 
console.log(str);