teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

正規表現の修正

2017/11/05 08:35

投稿

think49
think49

スコア18194

answer CHANGED
@@ -45,9 +45,9 @@
45
45
  console.log(getFilePathTokenByIndex(1, {pathname: '/questions/99172/1/'})); // "99172"
46
46
  ```
47
47
 
48
- "https://teratail.com/questions/99172/" を保証するなら、いくつか対策はあります。
48
+ "https://teratail.com/questions/99172" を保証するなら、いくつか対策はあります。
49
49
 
50
50
  1. `location.host` を見る
51
- 2. `/^/questions/(\d+)//.exec(location.pathname)` でマッチさせる
51
+ 2. `/^/questions/(\d+)(?=$|/)/.exec(location.pathname)` でマッチさせる
52
52
 
53
53
  Re: kimurayu さん

2

正規表現の修正

2017/11/05 08:34

投稿

think49
think49

スコア18194

answer CHANGED
@@ -48,6 +48,6 @@
48
48
  "https://teratail.com/questions/99172/" を保証するなら、いくつか対策はあります。
49
49
 
50
50
  1. `location.host` を見る
51
- 2. `location.pathname` を `//questions/(\d+)//` でマッチさせる
51
+ 2. `/^/questions/(\d+)//.exec(location.pathname)` でマッチさせる
52
52
 
53
53
  Re: kimurayu さん

1

質問文の追記を読んで

2017/11/05 08:33

投稿

think49
think49

スコア18194

answer CHANGED
@@ -1,6 +1,10 @@
1
+ ### 要件の確認
2
+
1
3
  「Aの処理」と「Bの処理」で**何をしたいのか**を具体化した方が良いのでは、と思います。
2
4
  単純に考えると、ファイルパスからファイル名やディレクトリ名を抽出するコードでしょうか。
3
5
 
6
+ ### DRY (Don't repeat yourself)
7
+
4
8
  > ※Aの処理とBの処理をif文を使用して合体させたい。
5
9
 
6
10
  要件から外れますが、**Don't repeat yourself**の原則に従い、共通処理を関数化するとスマートなように思いました。
@@ -21,4 +25,29 @@
21
25
 
22
26
  第二引数を省略すれば、`location.pathname` からファイルパスを参照します。
23
27
 
28
+ ### 質問文の追記を読んで
29
+
30
+ > ■A → https://teratail.com/questions/99172
31
+ > Aの処理で99172を取得したい。
32
+ >
33
+ > ■B → https://teratail.com/questions/99172/*/
34
+ > Bの処理で99172を取得したい。
35
+
36
+ 前方からindexを辿れば、インデックス値は固定になると思います。
37
+
38
+ ```JavaScript
39
+ function getFilePathTokenByIndex (index /* [, location] */) {
40
+ return (arguments.length < 1 ? location : arguments[1]).pathname.slice(1).split('/')[Number(index)];
41
+
42
+ }
43
+
44
+ console.log(getFilePathTokenByIndex(1, {pathname: '/questions/99172'})); // "99172"
45
+ console.log(getFilePathTokenByIndex(1, {pathname: '/questions/99172/1/'})); // "99172"
46
+ ```
47
+
48
+ "https://teratail.com/questions/99172/" を保証するなら、いくつか対策はあります。
49
+
50
+ 1. `location.host` を見る
51
+ 2. `location.pathname` を `//questions/(\d+)//` でマッチさせる
52
+
24
53
  Re: kimurayu さん