正規表現で文字列のチェックを行う実装をしたいのですが、うまくいかず質問させてください。
例えば、hoge
またはhoge2
だけ完全一致するような正規表現を書こうとした時、以下でうまくいきます。
js
1const r = '^(hoge|hoge2)$' 2const rr = new RegExp(r, 'g') 3console.log('hoge'.match(rr)) 4console.log('hoge2'.match(rr)) 5console.log('hoge3'.match(rr)) 6 7// -> Array ["hoge"] 8// -> Array ["hoge2"] 9// -> null
ただ、今回は@hoge
, @hoge2
を完全一致するようにしたく以下のように書いたのですが、うまくいきません
js
1const r = '@^(hoge|hoge2)$' 2const rr = new RegExp(r, 'g') 3console.log('@hoge'.match(rr)) 4console.log('@hoge2'.match(rr)) 5console.log('@hoge3'.match(rr)) 6 7// -> null 8// -> null 9// -> null
どう書けば正しく反応してくれるかご存知の方がいらっしゃいましたら教えていただきたいです
w*は何でしょう?
他の正規表現書いていたときの消し残しなので消しておきます????♀️(消しても結果は変わらないです)
「うまくいかない」とは、「一致すべきでないものが一致する」のでしょうか、それとも「一致するはずのものが一致しない」のでしょうか?
質問文のコードの部分を展開していただけるとコメントアウトが出てくると思うのですが、全てnullになってしまい、「一致するはずのものが一致しない」です
消し残しを消したら、$まで消えているようですが…。
^や$の意味を理解せず、出来合いの正規表現を場当たり的に改変しているように読めます。
ちゃんと基礎から正規表現を学習した方が良いと思います。
すみませんこちらはちゃんと確認しないまま更新してしまったので修正しました。以後更新する前に確認するようにします。
正規表現は今まで全く書いたことなかったので今回質問させていただきましたが、これを機に勉強してみたいと思います。ありがとうございました????♀️
回答1件
あなたの回答
tips
プレビュー