回答編集履歴
3
正規表現の修正
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
正規表現の修正
answer
CHANGED
@@ -48,6 +48,6 @@
|
|
48
48
|
"https://teratail.com/questions/99172/" を保証するなら、いくつか対策はあります。
|
49
49
|
|
50
50
|
1. `location.host` を見る
|
51
|
-
2. `
|
51
|
+
2. `/^/questions/(\d+)//.exec(location.pathname)` でマッチさせる
|
52
52
|
|
53
53
|
Re: kimurayu さん
|
1
質問文の追記を読んで
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 さん
|