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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

JavaScript

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

正規表現

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

Q&A

解決済

3回答

5231閲覧

JavaScriptの正規表現の方法

BANDIT1250FABS

総合スコア86

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

JavaScript

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

正規表現

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

0グッド

0クリップ

投稿2015/08/25 11:02

JavaScriptで、現在のURLを取得し、そのURL内の文字列を抜き取り、関数に渡す処理を行いたいのです。

<script type="text/javascript" src="/usr/file/attachment/aaaaa.js"></script> <script type="text/javascript"> var url = location.href; 正規表現でurlを加工 $(document).ready(function(){ getHtml(○○, 3, "UTF", 0).done(function(result){ $("#SuppInfo").html(result); }).fail(function(result) { $("#SuppInfo").html("最新情報はありません。"); }); }); </script>

例えば、URLがhttp://sample.jp/sample/category/2?site_domain=sample
とした場合、「2」の部分を正規表現で抜出し、getHtmlの○○の部分に渡したいのですが
どのようにしたらいいでしょうか。(2の部分は動的に変わるため、22の時もあれば、500の時もあります)
ご教授をお願いいたします。

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

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

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

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

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

guest

回答3

0

ベストアンサー

パラメータはいくらでも書き換えられます。
例えば「http://sample.jp/sample/category/2?site_domain=sample&x=category/2?」としてもシステムは動いてしまうでしょう。ですのでそのような場合でも誤作動をしないように作るべきです。

この場合はまずpathnameでパラメータを除外すべきです。そしてパスの最後の数字だけを取れば問題ないでしょう。

JavaScript

1if (location.pathname.match(/\/(\d+)$/)) { 2 console.log(RegExp.$1); 3} else { 4 console.log("なかった!"); 5}

「数字は絶対にある、ないことは想定できない」と言う場合なら

JavaScript

1location.pathname.match(/\/(\d+)$/); 2console.log(RegExp.$1);

だけでいいと思います。

投稿2015/08/25 17:02

miu_ras

総合スコア902

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

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

think49

2015/08/25 22:45

RegExp.$1 は標準ではなく、非推奨です。 String#match マッチした場合に配列を返すのでその配列を使うべきです。 この場合は String#match から RegExp#exec にするとパフォーマンスが向上します。 私の回答では filename の取得に正規表現を使わなくても良いかな、と思って String#slice を使いましたが、この辺りは好みもありそうですね。
guest

0

検索対象が必ず次のようなパターンで => 「スラッシュ」「対象(数値)」「クエスチョン」
このパターンは文字列中1箇所しか存在しない(URLなら普通そう?)事が確定なら
次のようなコードで抽出可能と思います。

javascript

1str = "http://sample.jp/sample/category/2?site_domain=sample "; 2trg = str.match(/\/(\d+)\?/i); //\dを\d+に修正しました。 3if(trg)trg=trg[1]; // trg=2

参考ページ

投稿2015/08/25 11:35

編集2015/08/26 05:42
hirohiro

総合スコア2068

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

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

BANDIT1250FABS

2015/08/26 01:29

ご回答いただき、ありがとうございます。 上記のコーディングでも可能ですが、URLの数値が変わった時にはnullになってしまいますよね?
guest

0

下記コードでどうでしょう。

JavaScript

1var url = /^(?:[^/?#]*\x2f)*([^#?]*)\?/.exec('http://sample.jp/sample/category/2?site_domain=sample&hoge=/?#&foo=/?#'); 2url[1]; // "2"

書いてから気が付きましたが、location.pathname を使った方がスマートに書けますね。

JavaScript

1var pathname = location.pathname, 2 filename = pathname.slice(pathname.lastIndexOf('/') + 1); 3 4console.log(filename);

投稿2015/08/25 11:33

編集2015/08/25 22:56
think49

総合スコア18164

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問