質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.49%
JavaScript

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

正規表現

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

Q&A

解決済

1回答

1020閲覧

JavaScriptで「.」の正規表現がわかりません

cuteboy

総合スコア15

JavaScript

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

正規表現

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

0グッド

0クリップ

投稿2019/04/25 21:43

編集2019/04/25 22:46

###実現したいこと
JavaScriptの正規表現で、URLを判定したいです。

■判定したいURL
https://【不明な文字】.fuga.com/color/【不明な文字】

■例えば
https://something.fuga.com/color/something

###試したこと
こちらのご説明によれば下記のハズですが出来ず、
'^https://[^/].fuga.com/color/[^/]'

こちらのご説明によれば下記のハズですがこれも出来ず、
'^https://[^/]./fuga.com/color/[^/]'

こちらのご説明によれば下記のハズですがやはり出来ず、
'^https://[^/]/./fuga.com/color/[^/]'

あとはバックスラッシュを2つ入れたりしても出来ず、
'^https://[^/]\.fuga.com/color/[^/]'

あれやこれやと探っていくうちに1時間くらい経ってしまい、teratail様を思い出しました。
皆様、どうぞ宜しくお願い致します。

###追記1
ちなみにこれはできてますので、「https://」の次の「.」だけが問題のようです。
'^https://hoge.com/[^/]'

###追記2
実際のチェックスクリプトです。3つのvar urlのうち、下のだけがなぜかerrorです。

javaScript

1// 対象のURL 2var url = 'https://hoge.com/something'; // allowでよし 3var url = 'https://hoge.com/shape#page=1'; // allowでよし 4var url = 'https://something.fuga.com/color/something'; // なぜかerror 5 6// hoge 7var hoge_array = [ 8 '^https://hoge.com/[^/]', 9 '^https://hoge.com/[^/]/shape\#page=[0-9:]', 10]; 11var hoge = new RegExp(hoge_array.join('|')); 12 13// fuga 14var fuga_array = [ 15 '^https://[^/].fuga.com/color/[^/]', 16]; 17var fuga = new RegExp(fuga_array.join('|')); 18 19// チェック 20if ( url.match(hoge) || url.match(fuga) ) { 21 console.log('allow'); 22} else { 23 console.log('error'); 24} 25 26

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

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

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

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

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

m.ts10806

2019/04/25 21:55

.comの.のほうをエスケープ入れても同じですか?
cuteboy

2019/04/25 22:01

追記させて頂きました。
退会済みユーザー

退会済みユーザー

2019/04/25 22:19

前の方は、/[^/]+ 後ろの方は/[^/]* 現状だと"/"以外の1文字しかマッチしないのでは?
cuteboy

2019/04/25 22:35

実際に数文字がチェックできているのですが、どうなんでしょうね。
cuteboy

2019/04/25 23:00

解決しました。お二人ともありがとうございました。
think49

2019/04/25 23:05

https://foo.bar.fuga.com/ にマッチするのは期待通りですか。間違い/正しいを論ずる場合は「要件」を明らかにして下さい。
think49

2019/04/25 23:09

入れ違いでしたね。
m.ts10806

2019/04/26 00:00

解決されたようで何よりです
guest

回答1

0

ベストアンサー

まず大前提としてですが、JavaScriptの正規表現は、専用のリテラルがあります。外側は'...'ではなく/.../です。途中に入る/は、区切りとの区別のために、/と書く必要があります。

そして、タイトルにかかわる内容ですが、ピリオドについては本来.と書くべきものですが、うっかり.と書いてしまったとしても「任意の1文字」にピリオド自身も含まれるので、余計なものがヒットすることはありますが、ヒットしなくなることはありません

本当の問題は「【不明な文字】」のところで、[^/]では1文字にしかヒットしないので、これを+で繰り返す必要があります。

javascript

1var regex = /^https://[^/]+.example.com/color//

(後半の「【不明な文字】」の箇所については、前方一致とすることで省略しています)

投稿2019/04/25 22:09

maisumakun

総合スコア145183

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

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

cuteboy

2019/04/25 22:34

いえ、違うみたいです。実際のスクリプトを「追記2」として質問に記載させて頂きましたので、もしよろしければ。
maisumakun

2019/04/25 22:36

new RegExpしていたのですね。だと1つ目のリテラルの件は関係ないですが、残りは共通です。
maisumakun

2019/04/25 22:41

「.と.」の件と「[^/]が1文字としか一致しない」件については、文字列からnew RegExpする場合にも共通します。
cuteboy

2019/04/25 22:41

逆になぜ、そのご回答の書き方ではない hoge.com の方(3つある「var url」の最初の2つ)は、きちんとチェックができているのでしょうか?
cuteboy

2019/04/25 22:43 編集

hoge.com の方(3つある「var url」の最初の2つ)は、 [^/]+ としないで、 [^/] だけでチェックできていますよね? あとバックスラッシュの数も違いますし。
cuteboy

2019/04/25 22:49 編集

ということは、「追記2」の hoge.com の方をチェックする正規表現は間違っているということですよね? あと「$」は終わりに書いた方がいいでしょうか? ぶっちゃけ早い話、「追記2」を正しく書くとどうなりますか?
maisumakun

2019/04/25 22:52

末端を気にしないのを逆用して、「^https://hoge.com/」だけで両方にヒットさせる、というのがいちばん手軽かと思います。
cuteboy

2019/04/25 22:54

たとえば「$」を追加して、こうした方がいいとか?そのような正しい書き方を教えて頂ければと。 '^https://[^/]+.fuga.com/color/[^/]+$'
cuteboy

2019/04/25 22:55

すみません入れ違いでした。なるほど。逆に利用。いいですね。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問