我编写此代码用于将字符串从“a”删除到“c”
var str = "abcbbabbabcd";
var re = new RegExp("a.*?c","gi");
str = str.replace(re,"");
console.log(str);
控制台中的结果是“bbd”
但适合我的结果是“bbabbd”
我可以使用正则表达式来解决这个问题吗?
感谢您的帮助。
我编写此代码用于将字符串从“a”删除到“c”
var str = "abcbbabbabcd";
var re = new RegExp("a.*?c","gi");
str = str.replace(re,"");
console.log(str);
控制台中的结果是“bbd”
但适合我的结果是“bbabbd”
我可以使用正则表达式来解决这个问题吗?
感谢您的帮助。
a(?:(?!a).)*c
使用lookahead
基于正则表达式。参见演示。在第一次之后.*?
也会消耗。要停止它,请使用.a
a
lookahead
https://regex101.com/r/cJ6zQ3/34
编辑:
a[^a]*c
您实际上可以使用negated character class
,因为您只有 1 个字符。
这g
意味着它是一个全局正则表达式,这意味着它会同时获取字符串中的abc
和abbabc
。所以这确实正确地从a..c
. 看来您只看到了两个abc
而错过了abbabc
. 结果bbd
实际上是正确的,因为它确实"remove string from 'a' to 'c'"。
abc
bb
abbabc
d => bbd
您需要将您的正则表达式更新为,a[^ac]*?c
这将避免字符a
和c
之间a
c
var str = "abcbbabbabcd";
var re = new RegExp("a[^ac]*?c","gi");
str = str.replace(re,"");
console.log(str);
这是另一种方法。
var str = "abcbbabbabcd";
var str= str.replace(/abc/g, "");
console.log(str);