0

了解しました。パターンは、、、またはで[abc]ある単一の文字と一致しますが、パターンはa、、、bまたはではない任意の文字と一致します。c[^abc] abc

上記のステートメントで文字を文字に置き換えた場合でも、最初のパターンを。のような代替構文に変更した場合でも適用されます。-- 、、、または。に等しい3文字の連続した文字列に一致します。、、、またはと等しくない3文字の文字列に一致させるにはどうすればよいですか?(abc|def|ghi)abcdefghiabcdefghi

4

2 に答える 2

2

これは正規表現でよくある質問であり、短い答えは「いいえ」です。正規表現の動作方法では、「...以外の3文字の文字列」とは言えません。

ただし、一部の正規表現エンジンでは、「ネガティブ先読みアサーション」と呼ばれるものが許可されています。これらは頭を動かすのに少し注意が必要です-少し技術的には、このルックアラウンドの説明はそれをかなりうまくカバーしているようです。

先読みについて重要なことは、それが「ゼロ幅」であるということです。つまり、文字列を「使い果たす」ことはありません。したがって、Javascriptでは、次のような文字列に一致させることができます。-は'abc123ghi'.match(/abc(?!def)...ghi/)、の後に(?!def)文字があってはならないことを示しますが、代わりに他の3文字が必要であることを示す必要があります。'def''abc'...

于 2012-09-15T13:45:58.310 に答える
0

否定された先読みを使用して、あなたが言っていることのいくつかを行うことができます:

xyz(?!abc|def|ghi)

これは、「xyzの後にabc、def、またはghi以外のものが続く」ことを意味します。それは実際にはソースを消費しないので、その後、「xyz」の後に一致を継続する必要があるものを配置します。あれは、

/xyz(?!abc|def|ghi)(\w*)/

「xyzhello」と一致し、最初のキャプチャグループには「hello」が含まれます。

于 2012-09-15T13:39:21.937 に答える