🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Q&A

解決済

2回答

771閲覧

JavaScriptの正規表現について

S.T.BAL

総合スコア2

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

0グッド

0クリップ

投稿2020/12/22 00:34

編集2020/12/22 02:01

現在、JavaScriptの勉強をしております。

下記のソースでRegExp()を使用し、半角英数字1文字以上をマッチさせたいと思っています。
ですが、下記のソースの通りに"aaaaaaa"という文字列を渡しても、ログの結果がfalseになってしまいます。

何か根本的に正規表現を勘違いしている気がしてならないのですが...
どなたか下記だとtrueにならない理由をご教授いただけると嬉しいです。

該当のソースコード・試したこと

var context = "aaaaaaa"; var regix = new RegExp('/[^a-zA-Z0-9]+/'); console.log(regix.test(context)); // false

参考サイト

■ コピペで使える JavaScript逆引きリファレンス
https://javascript.programmer-reference.com/js-regexp-sample/

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2020/12/22 00:53

念のため「何をチェックしたいのか」を記載されたほうが良いかと思います。 理由だけで良いなら現状でも良いのですけど。
S.T.BAL

2020/12/22 02:04

情報不足で失礼致しました。 修正した通り、「半角英数字1文字以上」をチェックしたいのですが、今の記述だと"aaaaaaa"がマッチせず、質問させていただいた次第です。
guest

回答2

0

ベストアンサー

お書きの正規表現は、「スラッシュの後に英数字以外が1文字以上続いて次にスラッシュ」なので"aaaaaaa"にはマッチしません。
スラッシュを取ってnew RegExp('[^a-zA-Z0-9]+')でも、「英数字以外が1文字以上続いたもの」ですのでマッチしません。
「英数字が1文字以上」なら、new RegExp('[a-zA-Z0-9]+')です。

もしくは、var regix = /[a-zA-Z0-9]+/;

投稿2020/12/22 00:52

otn

総合スコア85886

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

S.T.BAL

2020/12/22 02:16

丁寧なご回答ありがとうございます。 他の方にもご指摘いただいた通り、正規表現の認識が間違っておりました。。 重ねて質問になってしまって申し訳ないのですが、文字列で正規表現を記載する場合は'/'で囲む必要がない、という認識で問題ないでしょうか。
otn

2020/12/22 11:02

正規表現は別に/で囲むと決まっている物では無いです。 スラッシュで囲むのは正規表現リテラルを書くときだけです。
guest

0

^記号は、パターンにそのまま出てくるなら「文字列の先頭(設定によっては行の先頭)という位置」、[](文字クラス)内の先頭に出てくるなら「否定文字クラス(~に含まれない)」の指定に使われます。

あなたが書いたパターン/[^a-zA-Z0-9]+/では、[]内の先頭に^が書いてあるので否定文字クラスの指定で、「1個のスラッシュの直後に大小英字と数字ではない文字が1個以上連続し、1個のスラッシュがある」というパターンになっています。

質問に書いてありませんが、マッチさせたいパターンが「文字列の先頭から大小英字か数字が1文字以上連続する」なのであれば、^[]より前に書かないといけませんし、2個の/を削除しないといけません。

投稿2020/12/22 01:28

編集2020/12/22 01:33
Daregada

総合スコア11990

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

S.T.BAL

2020/12/22 02:11

ご回答ありがとうございます。 >> [](文字クラス)内の先頭に出てくるなら「否定文字クラス(~に含まれない)」の指定に使われます。 これに関しては自分の勉強不足で、^は場所関係なく文字列の先頭という意味で解釈しておりました。。 >>質問に書いてありませんが、マッチさせたいパターンが「文字列の先頭から大小英字か数字が1文字以>>上連続する」なのであれば、^は[]より前に書かないといけませんし、2個の/を削除しないといけませ>>ん。 連携不足で申し訳ないです。マッチさせたいパターンはその通りです。 ご教授いただきありがとうございます。勉強になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問