• 締切済み

条件式に正規表現は使える?

条件式にアドレスを指定して個のページだけ式が実行されるようにしたら、ローカルやページ内リンクを押すとアドレスが変わって実行されなくなります。 今回は we/c.html の時と we/c.html#goto何とか の時に実行してほしいので。 if(pageUrl === "https://we/c.html.*") これではいけないのですか? 難しくてよくわかりません。 そのまま正規表現を記載してはいけないので.test(pageUrl)のよう関数を条件式で実行するのですか? f(pageUrl === "https://we/c.html#js-goto-a") のようにページ内遷移のIDがくっつくだけですが、遷移先のIDはいろいろあるので#以下を正規表現ですべてにするだけで十分です。 if(pageUrl === "https://we/c.html.*")ではいけないのでしょうか?

みんなの回答

回答No.3

> フラグiはこれ以降はすべて対象という意味ですか? 大文字小文字を区別しないという意味です。 > \/ の部分はどのような意味なのでしょうか /は囲み文字なのですが、文字列中に/がある場合に囲み文字とされてほしくない時に、\/と表現します。 正規表現は奥が深いので、以下のページをよく読んで勉強してください。 https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Regular_Expressions

  • b0a0a
  • ベストアンサー率49% (156/313)
回答No.2

正規表現を使うならtestメソッド if(/^https:\/\/we\/c\.html/.test(pageUrl)) でもES2015で追加されたstartsWithメソッドを使うほうがオススメ if(pageUrl.startsWith("https://we/c.html"))

mousugusokoni
質問者

お礼

if(/^https:\/\/we\/c\.html/.test(pageUrl)) 下記の部分がhtml以降すべてという意味になるのでしょうか? /.test(pageUrl) アスタリスクではないのですね。

回答No.1

if (pageUrl.substring(0, (pageUrl + "#").indexOf("#")) === "https://we/c.html") ではいかが? 正規表現が使いたいなら、 if (pageUrl.match(/https:\/\/we\/c.html/i)) でもいいけど。

mousugusokoni
質問者

お礼

条件式にそのままmatchメソッドを記載できるのですね。 \/\/we\/ の \/ の部分はどのような意味なのでしょうか?

mousugusokoni
質問者

補足

フラグiはこれ以降はすべて対象という意味ですか?*ではないのですね

関連するQ&A

  • 条件式に正規表現を使う場合どうすればいい?

    条件式に正規表現を使う場合どうすればいいのでしょうか? if (inputAnswer.value === "あ" || inputAnswer.value === "ア") を if (inputAnswer.value === "あ" || inputAnswer.value === "ア" || inputAnswe2r.value === "あ" || inputAnswer2.value === "ア" || inputAnswe3r.value === "あ" || inputAnswer3.value === "ア") のように複数のinputAnswer変更したいのですが、条件式に正規表現を使う場合どうすればいいのでしょうか? inputAnswer.*.value ではだめですよね。 javascript.です。

  • 「正規表現」でよく使われる式

    K2Editor などテキスト検索ソフトで重宝する「正規表現」(私は使いこなせていませんが)のうちで、最もユーザーに使われる表現にはどんなものがありますか?正規表現自体の解説ページはあっても、どのような式がよく使われるかの解説は見当たりませんでした。ベスト3くらいよろしくお願いします。

  • 正規表現を使い、URLで条件分岐したいのですが…

    正規表現を使い、URLで条件分岐したいのですが、 うまくいかないので、教えてください。 <やりたいこと> http://ドメイン/page1.html http://ドメイン/page2.html       : のページの時のみ、 という条件分岐をしたい。 <現状> if($_SERVER['REQUEST_URI']=="/page1.html"){ とするとうまくいくのですが、 これを任意のpage○で対応したい $_SERVER['REQUEST_URI']=="^/page*.html$"){ としたけど、ダメでした。 どう書けば、よいでしょうか?

    • ベストアンサー
    • PHP
  • 言語ではなく、正規表現のみで複数の条件を記述する方法 ?

    一つの条件の正規表現は書けるようになりましたが、 条件が重なった場合の対処の仕方がわかりません。 my $val = "12"; #数字のみ if($val =~ /^[0-9]+$/){ # match! } #0で無い if($val !~ /^0$/){ # match! } # 数字で0でない <---複数条件 ? # 言語でカバーするのではなく、正規表現のみ(1つの正規表現) # でANDやORやXORができるパターンの記述方法が知りたいです。 if($val =~ /^[0-9]+$/) && ($val !~ /^0$/){ # match! }

    • ベストアンサー
    • Perl
  • 正規表現について教えてください。

    正規表現について教えてください。 Oracleで開発を行っている者ですが、ネットや本で調べても わからない箇所がありましたので、ここに質問として挙げさせていただきます。 ご教示いただけると幸いです。 現在、下記のようなデータが入ったテーブルがあります。 ---------------------------------------------------------------------------------- ID | SENTENCE          | REG_EXP ---------------------------------------------------------------------------------- 1 | <○○○:XXXX>      | [^<][^:]+ ---------------------------------------------------------------------------------- 2 | <○○○:XXXX>→<△△△:XXXX> | ---------------------------------------------------------------------------------- 3 | ■■■■■<○○○:XXXX> | ---------------------------------------------------------------------------------- このテーブルを使って、アプリを作っているのですが、 期待動作としては、SENTENCEの列に入っている文字列を REG_EXPの列に入っているデータ(正規表現のパターン)で マッチした文字列を切り取るようにしたいのです。 例えば、IDが1の場合は○○○が切り取られるのが期待動作です。 (注.この動作は、REGEXP_SUBSTR関数を用いてSQLで実行します。) お聞きしたいのは、IDが2の場合は△△△を、IDが3の場合は○○○を、 配列の最初の要素に入れるには、正規表現をどのように記載すればよいのか、ということです。 ○、△、■、Xの部分は英数字、日本語のどれが入るのかはわかりませんが、 <や→、:などの全角記号のフォーマットはこのままになります。。 IDが2の正規表現は[^<:→]+[^<:→]+[^<:→]+ で試してみたのですが、 うまく出来ませんでした・・・。 テーブルの線の調整がうまくできず、 表が見づらくて申し訳ありませんが、 正規表現に詳しい方、ご教示をよろしくお願いいたします。

  • 「マッチしない」正規表現の書き方

    正規表現について、おたずねします。 文字列 abc,def,ghi のいずれかにマッチする正規表現は (abc|def|ghi) ですよね。 それでは、「abc,def,ghi のいずれにもマッチしない」正規表現は、どう書けばいいのでしょうか? あちこち調べましたが、どうしてもわかりません。 ただし、if $a =~ /(abc|def|ghi)/ などで、=~ を !~ に直す、というのはナシです。あくまでも右辺の式の中で表現したいのですが…

  • 正規表現の質問です。

    実行環境がなく困っています・・ Perlで以下の正規表現はマッチするでしょうか? if("EUC-JP" =~ m|EUC|i ) { print "match"; }

    • ベストアンサー
    • Perl
  • 条件式について

    C言語でプログラムを作成しています。 if分を使う部分があるのですが、条件式「==」を使うとどうもうまくいきません。 プログラムの条件文の箇所を簡単に書きますと、 if(time>=2000){ 条件1; if(a[i] == a[i-1]) 条件2; }else{ 条件3; } という非常に一般的なものです。 3行目の「==」がうまく機能しておらず、条件2がスルーされてしまいます。ためしに「>=」に変えて実行してみるとうまく機能します。 以前もこういった状況があったので、「==」を使わない記述をしたのですが、今回は「==」を使わなければならないので、「==」が機能しない理由があれば教えていただきたいです。 非常に基礎的なことで申し訳ないのですが、宜しくお願い致します。

  • 正規表現でのマッチング

    連想配列%hushがあります。 %hushの中のキーが「a何とか」、つまり a0、a1、a2、a3、・・・ の値だけを、配列@arrayに格納します。 つまり  $array[0]=$hush{'a0'}  $array[1]=$hush{'a1'}  $array[2]=$hush{'a2'}  $array[3]=$hush{'a3'} ・・・ といった感じにしたいのですが、 「a何とか」は正規表現を用いて  a.* と表現できます。 ってここまでは手元の本で分かったのですが、マッチングのif文をどう書けばいいんだよ!  if($key==a.*) と書いてもうまくマッチしてくれないんで、a.*を""で括ってみたり()で括ってみたりするものの相手にされず・・・ 手元の本は「こういう場合正規表現ではこう書けば良くて、これをマッチングさせれば良い」みたいなことを書いていますが、マッチングのさせ方は書いていません。 プログラムの文法書を読むと、条件分岐の仕方は書いていますが、==演算子の右側が正規表現だった場合の使い方は書いていません。 あるいは、正規表現の場合のマッチングはif文などを用いないのでしょうか? だったら正規表現の本にマッチングの文法を書いていますよね!? なんだかんだでマッチングがうまくいかないのです。 この場合、どう記述すればいいのでしょうか? お手数をお掛けします。

  • 正規表現について

    正規表現について質問が有ります。 プログラミング初心者なので、根本的な間違い等も犯している可能性もありますがご了承下さい。 今、javascriptを使ってフォームに入力されたメールアドレスの入力チェックを行おうとしています。 とりあえずはwebを漁って見つけたソースでチェックできる様にはなったのですが、もうちょっと拡張したいと思った所、つまずいてしまいました。 元のソースは if (!this.value.match(/^[\x01-\x7F]+@((([-a-z0-9]+\.)*[a-z]+)|(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}))$/){ alert("error"); } という風にチェックをしており、 ******(@マークが無い) ***@(@の後半が無い) @***(@の前半が無い) などの基本的な形式に対してはチェックを行う様になっています。 しかし、hoge@hogeの様に書くと、適当に書いたドメインでもスルーしてしまいます。 そこで、ドメインのチェックも行おうとしているのですが、ここで詰まっています。 ちなみに今回は携帯のアドレスに限定してチェックを行おうと思っています。 javascriptでの正規表現について書いてあるページを見ながら下の様に書いたのですが上手く動作してくれません。 正規表現の書き方がおかしいのだろうとは思うのですが、どこがいけないのかよく分かりません。 if (!this.value.match(/^[\x01-\x7F]+@((([-a-z0-9]+\.)*[a-z]+)|(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}))$/) || /*ここから下を追加*/ (!this.value.match(/@(docomo|ezweb|softbank)\.ne\.jp$/) || !this.value.match(/@i\.softbank\.jp$/)){ alert("error"); } 最初はもとからある基本的な入力形式のチェックを行い、また@後のドメインが携帯のドメインでない場合にエラーを返す。というつもりで書きました。 ですが、***@docomo.ne.jpとしてもエラーが返って来てしまいます。 原因を教えていただけますか? また、もとからあった正規表現が何をどういう指定しているのかもキチンとは理解していないので、教えていただけるとうれしいです。 よろしくお願いします。