プロが教える店舗&オフィスのセキュリティ対策術

すいません質問があります。
正規表現について質問です。条件に合う場合はtrueを返したいです。

以下のURLがあります。

https://abc.com/detail/12345

以下の関数があります

var checkProductPage = function()
{
var reg = /(abc.com\/details\/)(0-9]*$))/;
var check = reg.test(window.location.href);
return check
}
checkProductPage()

この場合、上記関数を実行するとtrueを返します。

さらに以下のURLがあります。

1. https://abc.com/detail/12345 ->true
2. https://abc.com/detail/12345xyz -> false
3. https://abc.com/detail/xyz12345 -> false
4. https://abc.com/detail/x12y345z -> false
5. https://abc.com/detail/12345?utm=12345 -> true
6. https://abc.com/detail/12345&utm=12345 -> false

上記に書いたとおりなのですが、1と5だけはtrueを返すようにして、それ以外のパターンはFalseを返すようにしたいです。先に書いた関数だと1はTrueですがそれ以外はすべてFalseです。
以下のように書いてみたんですがそれでもダメでした。


var checkProductPage = function()
{
var reg = /(abc.com\/details\/)(0-9]*$)(\?.+)?$/;
var check = reg.test(window.location.href);
return check
}
checkProductPage()


1, 5 だけをTrueを返す関数を教えてほしいです。

よろしくおねがいします。

質問者からの補足コメント

  • うーん・・・

    ありがとうございます。試してみました。

    すべてのパターンでFalseを返してしまいます・・・
    僕の環境がおかしいのでしょうか。

    No.1の回答に寄せられた補足コメントです。 補足日時:2022/10/07 08:07

A 回答 (3件)

質問文の正規表現にあったのが、details だったので、そのまま details と書いたのですが、データの方を見ると details じゃなくて detail ですね。


そこを detail に直してください。
    • good
    • 0

こんにちは



No1様の回答でも行けるはずと思います。

>すべてのパターンでFalseを返してしまいます・・・
>僕の環境がおかしいのでしょうか。
ご質問文の例示が、括弧がおかしい上に「details」なのか「detail」なのかも怪しげだからでしょう。

以下ではいかがでしょうか?
 var reg = /abc.com\/detail\/\d+($|\?)/;

(No1様の回答でもよいはずですが、上手くいかない原因はご自身で考えてください)
    • good
    • 0

var reg = /(abc.com\/details\/)([0-9]*)(\?.+)?$/;

この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!