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 class1キャラしかないので実際に使えます。

于 2015-10-08T05:09:26.250 に答える
1

gグローバル正規表現であることを意味し、文字列内のabcとの両方を取得することを意味abbabcします。したがって、これは からアイテムを適切に削除しますa..c。2 つしか見ておらずabc、 を見逃したようですabbabc。結果bbdは、実際には"remove string from 'a' to 'c'" であるため、実際には正しいです。

abcbbabbabcd => bbd

于 2015-10-08T05:09:48.077 に答える
0

正規表現を に更新する必要があります。これにより、との間のa[^ac]*?c文字が回避されます。acac

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

正規表現の視覚化

于 2015-10-08T05:08:45.793 に答える