引用符で囲まれていないすべてのインスタンスにマッチする正規表現
質問
から
このQ/A
から、与えられた正規表現のすべてのインスタンスをマッチングすることを推論しました。
ではなく
は引用符で囲まれているため、マッチングが不可能であることがわかりました。つまり、エスケープされた引用符にはマッチしないのです。
"this whole \"match\" should be taken"
). もし、私の知らない方法があれば、私の問題を解決してくれるでしょう。
しかし、そうでない場合、私はJavaScriptで使用できる効率的な代替手段があるかどうかを知りたいのです。私はそれについて少し考えましたが、すべてではないにしても、ほとんどのケースで機能するようなエレガントなソリューションを思いつきません。
具体的には、私は .split() と .replace() メソッドで動作する代替手段が必要なだけですが、より一般化できれば、それがベストです。
例として
の入力文字列。
+bar+baz"not+or\"+or+\"this+"foo+bar+
を引用符の中ではなく、#に置き換えると、次のようになります。
#bar#baz"not+or\"+or+\"this+"foo#bar#
どのように解決するのですか?
実は、引用符で囲まれていない正規表現は、引用符を閉じた文字列と一致させることができます。例えば、上記の例のように、次のようにマッチさせたいとします。
\+
.
ここで重要なのは、ある単語が引用符の外にある場合、その後に偶数個の引用符が続くということです。これは先読みのアサーションとしてモデル化することができます。
\+(?=([^"]*"[^"]*")*[^"]*$)
さて、エスケープされた引用符を数えないようにしたいと思います。これは少し複雑になります。代わりに
[^"]*
の代わりに、バックスラッシュも考慮に入れて
[^"\\]*
. バックスラッシュまたは引用符のどちらかに到達した後、バックスラッシュがあった場合は次の文字を無視するか、次のエスケープされていない引用符に進む必要があります。これは次のようになります。
(\\.|"([^"\\]*\\.)*[^"\\]*")
. 組み合わせると、次のようになります。
\+(?=([^"\\]*(\\.|"([^"\\]*\\.)*[^"\\]*"))*[^"]*$)
であることは認めます。 少し 暗号のようなものです。)
関連
-
[解決済み] XHTMLの自己完結型タグを除くオープンタグにマッチするRegEx
-
[解決済み] grepによるネガティブマッチング(fooを含まない行にマッチする)
-
[解決済み] JavaScriptが無効になっているかどうかを確認する方法を教えてください。
-
[解決済み] 正規表現の全出現回数をマッチングさせる方法
-
[解決済み] Regex 2つの文字列間のすべての文字にマッチする
-
[解決済み] Bashでコマンド内のシングルクォート内の変数を展開する
-
[解決済み] 上級者向けJavaScript。この関数はなぜ括弧でくくられるのですか?重複
-
[解決済み] モバイルWeb HTML5フレームワークの選び方【終了しました
-
[解決済み] jQueryを使用して、すべてのクリックイベントハンドラを削除するにはどうすればよいですか?
-
[解決済み] Node.jsのES6クラスをrequireで作る
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] ジェスト あるクラスの特定のメソッドをモックする方法
-
[解決済み] Chart.jsを使ってドーナツチャートの中にテキストを追加するには?
-
[解決済み] node.jsで文字列のsha1ハッシュを取得するにはどうすればよいですか?
-
[解決済み] サブドメインにまたがってlocalStorageを使用する
-
[解決済み] JavaScriptでjson-objectのキーを取得する [重複].
-
[解決済み] Promise : then vs then + catch [重複].
-
[解決済み] javascriptでオプションのパラメータを扱う
-
[解決済み] <ng-content>が空かどうかを確認する方法は?(これまでのAngular 2+で)
-
[解決済み] JavaScript で `throw` の後に `return` をする必要がありますか?
-
[解決済み] Regex パターンでマッチング、除外する場合 / との間を除く