从正则表达式中删除子字符串之间的字符串
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
,这将避免字符 a
和 c
在 a
和c
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
表示它是一个全局正则表达式,这意味着它会同时获取字符串中的 abc
和 abbabc
。所以这确实正确地从 a..c
中删除了项目。您似乎只看到了两个 abc
而错过了 abbabc
。结果 bbd
实际上是正确的,因为它确实 "remove string from 'a' to 'c'".
abc
bb
abbabc
d => bbd
还有一种方法。
var str = "abcbbabbabcd";
var str= str.replace(/abc/g, "");
console.log(str);
我写这段代码是为了将字符串从 'a' 删除到 'c'
var str = "abcbbabbabcd";
var re = new RegExp("a.*?c","gi");
str = str.replace(re,"");
console.log(str);
控制台的结果是"bbd"
但适合我的结果是 "bbabbd"
我可以使用正则表达式来解决这个问题吗?
感谢帮助。
您需要将正则表达式更新为 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);
a(?:(?!a).)*c
使用基于 lookahead
的 regex.See 演示。.*?
将在第一个 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
还有一种方法。
var str = "abcbbabbabcd";
var str= str.replace(/abc/g, "");
console.log(str);