
JavaScriptで?や|などのメタ文字をエスケープするために\をつけるよう変換したいのですが、?を置換する場合replaceを使って\?にできたのですが例えば????や|||など連続させると\????と最初だけエスケープされます。これを\?\?\?\?のように変換するにはどうすればよいのでしょうか?また\のエスケープ方法なんかも教えてください。
説明が変で申し訳ありませんが、なかなか上手く変換できず困っています。
PS
カテゴリが違いますがJavaScriptでなく、Perlで簡単に可能な場合はPerlでのやり方などもぜひご教授ください。
お願い致します。
No.3ベストアンサー
- 回答日時:
#2です
\マークに関しては、通常string型のリテラルとして変数に代入する場合、エスケープが必要です
なので、まず変数の代入の時点で
//例 変数str に ?|\ という文字列を代入させたい場合
str = "?|\\";
となります
まずここがエラーの原因になっている可能性の一点目
そしてもうひとつが、RegExp内です
前回説明したようにRegExp -> replaceと渡るので"エスケープの\"を表すためにも更にエスケープが必要です
jsの (\\?|\\|) とperlの (\?|\|) を比べるとわかりやすいですが、\が倍必要になるということです
replace内でエスケープではない文字列の\マーク
=1点目で挙げたように \\ を渡したいので、
RegExp内では\\両方をエスケープしてあげる必要があります
つまり、めんどくさいことになりますが、\\\\ となるわけです
前回の内容を変えてまとめると
//
str = "?|\\";//= ?|\
document.write(str + " → ");//試し書き用
str = str.replace(new RegExp("(\\\\|\\?|\\|)","g"),"\\$1");
document.write(str);
//
となります
RegExp内の(\\\\|\\?|\\|)がreplaceで(\\|\?|\|)として扱われるということです
このreplaceでの扱われ方とperlでのマッチパターンの書き方が共通項となります
$str =~ s/(\\|\?|\|)/\\$1/g;### 例
たびたび回答ありがとうございます。
試した結果ばっちり上手くいきました!
また1つよい勉強ができました。
本当にありがとうございました。
No.2
- 回答日時:
javascriptはRegExpが用意されているのでreplaceにそちらを使うと便利です
//
str = "???||||?|?||";
str = str.replace(new RegExp("(\\?|\\|)","g"),"\\$1");
document.write(str);
//
RegExp -> replace と流れるので、RegExp内では
エスケープ用の\に更にエスケープ(\\?と\\|部分)が必要になります
"g"は繰り返し実行、$1は RegExp内()部分=マッチした内容の後方参照です
エスケープされていない | は、複数条件用で「又は・もしくは」を意味します
perlなら
$str = "???||||?|?||";
$str =~ s/(\?|\|)/\\$1/g;
print $str;
のような感じです
この回答への補足
回答ありがとうございます。
早速試した結果見事エスケープに成功しました!
本当にありがとうございます(しかもPerlまで)。
しかしこの方法でやってみたら\マークは上手くエスケープできなかったのですが\マークは他に特別な方法でエスケープするものなのでしょうか?それとも自分のやり方が悪いのか・・・w
気が向いたぜひ教えてください。お願いします。
No.1
- 回答日時:
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
jqueryのselect2で検索欄の文字...
-
二次元配列を使って順位をだす...
-
プラグイン無しでContactform7...
-
画面遷移を行わずに同一ページ...
-
ラジオボタンを複数選択したと...
-
Adobe acrobat proでフォームを...
-
jsonテキストデータの並び替え...
-
タグを教えてください。
-
jsで質問です。 formをsubmitし...
-
2025年相性がいい人のサイトの...
-
CookieをWebStoeageに変える
-
Outlookのアカウントがあるとメ...
-
<tr>指定した表の行要素をボ...
-
食材の期限を管理するためにGAS...
-
ビデオのJSについて
-
鍵盤アプリで、スマホの画面に...
-
<div>のタッチ状態を維持したま...
-
jQueryでシンセサイザーを作っ...
-
プログラミング 学習
-
HTMLでサブフレームから親のス...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
jsonテキストデータの並び替え...
-
スマホ上で、左右スワイプで次...
-
ラジオボタンを複数選択したと...
-
<tr>指定した表の行要素をボ...
-
ボタンを押したあとに画像を表...
-
画面遷移を行わずに同一ページ...
-
イラストレーター、縦中横のシ...
-
GASでチェックボックスを一括of...
-
jqueryのselect2で検索欄の文字...
-
初心者です。gulpでコンパイル...
-
階層別の組織図の自動作成について
-
セレクトを全て選択されていな...
-
セレクトボックスで配列を呼び...
-
タグを教えてください。
-
jsで質問です。 formをsubmitし...
-
Adobe acrobat proでフォームを...
-
任意の変数が任意の値になった...
-
jsで質問です。 ボタンが二つ存...
-
2段階プルダウンで1段階目の選...
-
Outlookのアカウントがあるとメ...
おすすめ情報