[解決済み] ?:, ?! と ?= の違い
2022-04-22 10:07:27
質問
これらの表現の意味を探したが、正確な違いが分からなかった。
このように言われています。
-
?:
表現にマッチするが、キャプチャしない。 -
?=
サフィックスにマッチするが、キャプチャから除外される。 -
?!
サフィックスがない場合にマッチします。
これらを単純なRegExで使ってみましたが、どれも似たような結果になりました。
例えば、以下の3つの式は非常によく似た結果になります。
-
[a-zA-Z0-9._-]+@[a-zA-Z0-9-]+(?!\.[a-zA-Z0-9]+)*
-
[a-zA-Z0-9._-]+@[a-zA-Z0-9-]+(?=\.[a-zA-Z0-9]+)*
-
[a-zA-Z0-9._-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9]+)*
解決方法は?
との違いは
?=
と
?!
は、前者は与えられた式がマッチすることを必要とし、後者はそれが
ない
にマッチします。例えば
a(?=b)
は "ab" の "a" にはマッチしますが、 "ac" の "a" にはマッチしないことに注意してください。一方
a(?!b)
は "ac" の "a" にマッチしますが、"ab" の "a" にはマッチしないことになります。
との違いは
?:
と
?=
は、その
?=
はマッチ全体からその式を除外するのに対し
?:
は、キャプチャグループを作成しないだけです。したがって、例えば
a(?:b)
は "ab" の "abc" にマッチするのに対し
a(?=b)
は "abc" の "a" にのみマッチします。
a(b)
は "ab" にマッチします。
そして
は、"b"を含むキャプチャを作成します。
関連
-
Vueの「データを聴く」原則を解説
-
[解決済み】Node Version Manager のインストール - nvm コマンドが見つかりません。
-
[解決済み】ローカルファイルを開くことができません - Chrome: ローカルリソースの読み込みが許可されていない
-
[解決済み】awaitは非同期関数でのみ有効です。
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] let "と "var "の使い分けは?
-
[解決済み] callとapplyの違いは何ですか?
-
[解決済み] Bowerとnpmの違いは何ですか?
-
[解決済み] JavaScriptのnullとundefinedの違いは何ですか?
-
[解決済み】AngularJS 。observe メソッドと $watch メソッドの違い
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
vue3レスポンシブ対応のためのsetup+ref+reactive
-
vueのグローバルがscss(mixin)を導入。
-
Javascript Bootstrapのグリッドシステム、ナビゲーションバー、ローテーションの説明
-
vueの補間表現とv-textディレクティブの違いについて
-
Vueの「データを聴く」原則を解説
-
[解決済み】JavaScriptの配列でforEachが関数でない不具合
-
[解決済み】JavaScript TypeError: null のプロパティ 'style' を読み取ることができない
-
[解決済み】(Google Map API) Geocodeは以下の理由で成功しませんでした。REQUEST_DENIED
-
OSSアップロードエラーを解決する: net::ERR_SSL_PROTOCOL_ERROR
-
jq は html ページとデータを動的に分割する。