
下記、正規表現の意味を教えてください
var x = new RegExp('[\\?&]' + hoge);
■調べてみた限りでは下記のような感じだと思うのですが…
\?
・0文字または1文字の\
[\?]
・「0文字または1文字の\」の何れか
[\?&]
・「0文字または1文字の\」の何れか、の最後にマッチ
[\\?&]
・最初の\はエスケープ
new RegExp('[\\?&]' + hoge);
・引数で受け取った文字列の最後の\をエスケープした内容にhogeを追加した文字列を返す
No.3ベストアンサー
- 回答日時:
概ね、#1の方が仰るとおりですが、一つだけ訂正事項があります。
[] は "\" と "]" と "^" (先頭に限る) 以外はエスケープせずともメタキャラクタとして扱われません。
ただし、文字列リテラルとして扱う場合は "\" がメタキャラクタとなる為、new RegExp 内で "\\" を表現する為には "\\\\" と記述する必要があります(文字列リテラル、正規表現で2回エスケープが発生する為)。
従って、new RegExp('[\\?&]') は "?" または "&" にマッチする正規表現となります。
console.log(new RegExp('[\\?&]').test('\\')); // false
console.log(new RegExp('[\\?&]').test('?')); // true
console.log(new RegExp('[\\?&]').test('&')); // true
文字クラス内の "\\" は後続文字をエスケープする意味しかもたず、この場合はなくても結果が変わりません。
コード製作者のミスと思われます。
# Re: re97さん
回答ありがとうございました。
>new RegExp 内で "\\" を表現する為には "\\\\" と記述する必要があります(文字列リテラル、正規表現で2回エスケープが発生する為
・正規表現難しいですね(内容もそうですが、検索しづらいという意味においても)
・大変参考になりましたー
No.2
- 回答日時:
[]内では多くの特殊文字が普通の文字として解釈されます。
No.1
- 回答日時:
ちゃう。
文字列を解析する順番がちがう。・まず […] は…のうちのいずれかの文字。
・つぎに […] の中の \\?& を *頭から* 見て上記の…にあたる文字が何かをみる。
・1文字目は \ だから次の文字と合わせて解釈する。次の文字は \ だから、これは '\' という文字そのもの。
・3文字目は ?。[] の外ならば前の表現が0~1回現れるという意味だが [] の中なのでそのままの '?' という文字。
・4文字目は &。そのまま '&' となる。
つまり '[\\?&]' は、 「'\', '?' , '&' の内のいずれかの文字」という意味になる。
それに hoge の内容がつけ加わるから、「'\', '?' , '&' の内のいずれかの文字に続けて hoge の内容が並んでいる」という意味になる。
回答&詳細な解説ありがとうございました。
>文字列を解析する順番がちがう
・どういう風に考えたらよいかが分かりました
・大変参考になりましたー
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript javascriptで文字分割は、 split() などメソッド不要??? 4 2023/02/06 22:50
- Visual Basic(VBA) 以下のVBAで該当文字列の前後に付与したい。 例 前に付与 abc ユーザーID 12345 後に付 3 2022/04/19 21:50
- その他(プログラミング・Web制作) テキストエディタで複数行にわたる文字列の行頭に番号を振る方法 4 2023/03/11 12:57
- Visual Basic(VBA) エクセルから、パワーポイントのスライドを複数作成する。 1 2022/07/08 09:40
- その他(コンピューター・テクノロジー) googleスプレッドシートでカッコ内の文字数をカウントしたい 1 2023/01/17 15:52
- Visual Basic(VBA) Vbaで数式をポーランド記法に変換するコードを作って実行しようとするとフリーズします。 1 2022/05/24 17:53
- Visual Basic(VBA) VBAで、特定の文字より後を削除して残った数値を文字列に変換と特定の文字より前も削除したい 3 2022/04/15 19:21
- オープンソース 【ChatGTPのオープンソースソフトウェアを解析したことがある方、教えてくださ 2 2023/03/08 18:57
- Java Java 南京錠 2 2023/02/04 11:46
- C言語・C++・C# C#の問題です。 文字列型の配列 s[100] にキーボードから入力された100文字以内の文字列(単 2 2022/06/22 15:18
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
文字列の検索
-
メルアドをチェックする正規表現?
-
脳内メーカーや自己紹介工場
-
正規表現について
-
全角文字変換
-
入力チェック
-
VB2005でExcelのアクティブセル...
-
replaceで正規表現を利用したい
-
枠内文字の均等割付について
-
SJISの範囲
-
初期入力モードを半角カタカナ...
-
Javascriptでの入力補助について
-
VBA 数(可変)分だけ順に記...
-
”吴”とはなんですか?
-
入力文字を瞬時に変える
-
ジャバスクリプトのエラーを直...
-
FLASHってネット上での表示につ...
-
拡大スクリプト・zoom_ブック...
-
FBのいいねボタンが表示されま...
-
ジオシティーズで、fullscreen。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
文字認証の問題
-
正整数の半角数字かどうか判定する
-
VB.NET2003 テキストボックスに...
-
VC#でテキストボックスに変数の...
-
エクセルVBA/ Formatで文字列が...
-
禁止文字チェック
-
ハイフンだけ置換したい。
-
VBAによる第3、4水準文字の判定...
-
「終了していない文字列型の定...
-
Visual Basic 6.0 のテキストボ...
-
javascript 文字列の最後から1...
-
gas 全角数字を半角数字に変換
-
Vba SelStart、SelLen教えてく...
-
C#でTextBoxに数値のみ入力可能...
-
CListCtrl の特定のセル(アイ...
-
Excel VBA カタカナ セル判定...
-
エクセル 半角英数6文字以上 ...
-
入力された文字を1文字ずつチ...
-
正規表現について
-
c言語で「文字列(最大80文字)お...
おすすめ情報