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で質問しましょう!
似たような質問が見つかりました
- フリーソフト フォルダ、ファイル名の一括変換について 3 2023/03/16 09:23
- Visual Basic(VBA) 特定の文字を簡単な操作で半角スペースに変換するか削除したい 2 2022/11/01 10:35
- その他(コンピューター・テクノロジー) 【Tableau Desktop】文字列から8桁の数字を日付型(yyyyMMdd)として取得 1 2023/07/31 10:17
- Visual Basic(VBA) EXCEL VBAで教えてください。 1 2022/12/22 04:20
- その他(Microsoft Office) WordやExcelで英数字のみ半角または全角にしたい 6 2022/08/03 08:18
- JavaScript Q&Aの掲示板を作成していてヤフー知恵袋やgoo質問のように質問ごとにURLを生成したい 5 2023/08/04 01:22
- JavaScript JAVASCRIPT 2 2022/04/15 15:10
- その他(Microsoft Office) Microsoft Excelの文字変換で教えて下さい。 商社勤務です。 営業マンと言う言葉と○万な 2 2022/04/23 11:14
- Excel(エクセル) エクセルの質問です 3 2023/07/16 17:33
- その他(Microsoft Office) Microsoft IME 一発で変換できない言葉がある 3 2022/07/19 19:29
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
読み込んだQRコードをフォーム...
-
特定の文字列を複数抜き出した...
-
var exports = exports || {}; ...
-
ローディングアニメーションの...
-
GASでチェックボックスを一括of...
-
追加ボタンを押した際に ok ボ...
-
①入力フォーム→②確認表示画面→③...
-
GASに文字列として関数を入れる...
-
GASでGoogleフォームの自動返信...
-
React hooksが値を返して配列変...
-
初心者です。gulpでコンパイル...
-
ジャバスクリプトについて。
-
プログラムについて。
-
HTMLタグに複数のクラスを設定...
-
Googleフォームで選択肢に応じ...
-
ボタンを押したあとに画像を表...
-
disabled プロパティが表示され...
-
出発駅A、到着駅Bを選択すると...
-
Colorboxがうまく設置できません
-
Cookieに保存されない
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
二次元配列を使って順位をだす...
-
プログラムについて。
-
Q&A掲示板の入力フォームに文字...
-
メールフォームの日付入力フォ...
-
iOSのみダブルタップが必要
-
ジャバスクリプトについて。
-
画面遷移を行わずに同一ページ...
-
特定の文字列を複数抜き出した...
-
指定時間になったら、WEBサイト...
-
追加ボタンを押した際に ok ボ...
-
①入力フォーム→②確認表示画面→③...
-
スマホ上で、左右スワイプで次...
-
読み込んだQRコードをフォーム...
-
フロントエンドフレームワーク...
-
React hooksが値を返して配列変...
-
GASでGoogleフォームの自動返信...
-
初心者です。gulpでコンパイル...
-
階層別の組織図の自動作成について
-
HTMLで作った時報アプリが動き...
-
jQueryで同じクラス名のものを...
おすすめ情報