4

我编写此代码用于将字符串从“a”删除到“c”

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

控制台中的结果是“bbd”

但适合我的结果是“bbabbd”

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

感谢您的帮助。

4

4 回答 4

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

使用lookahead基于正则表达式。参见演示。在第一次之后.*?也会消耗。要停止它,请使用.aalookahead

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

编辑:

a[^a]*c

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

于 2015-10-08T05:09:26.250 回答
1

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

abcbbabbabcd => bbd

于 2015-10-08T05:09:48.077 回答
0

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

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

正则表达式可视化

于 2015-10-08T05:08:45.793 回答
0

这是另一种方法。

var str = "abcbbabbabcd";
var str= str.replace(/abc/g, ""); 
console.log(str);
于 2015-10-08T05:25:33.960 回答