回答編集履歴
2
追記
test
CHANGED
@@ -225,3 +225,107 @@
|
|
225
225
|
https://kokyaku.net/abc.def/
|
226
226
|
|
227
227
|
```
|
228
|
+
|
229
|
+
|
230
|
+
|
231
|
+
### 追記
|
232
|
+
|
233
|
+
|
234
|
+
|
235
|
+
abc も def も無いケースがあるということなので、やはりルートを指定する必要があります。次のコードではルートを配列に入れてそれを使います。
|
236
|
+
|
237
|
+
|
238
|
+
|
239
|
+
```JavaScript
|
240
|
+
|
241
|
+
const testStrings = [
|
242
|
+
|
243
|
+
"https://test.jp/test/abc",
|
244
|
+
|
245
|
+
"https://test.jp/test/color/abc/",
|
246
|
+
|
247
|
+
"https://test.jp/test/def/",
|
248
|
+
|
249
|
+
"https://test.jp/test/color/def/",
|
250
|
+
|
251
|
+
"https://test.jp/test2/abc/",
|
252
|
+
|
253
|
+
"https://test.jp/test2/color/abc/",
|
254
|
+
|
255
|
+
"https://test.jp/test2/def/",
|
256
|
+
|
257
|
+
"https://test.jp/test2/color/def/",
|
258
|
+
|
259
|
+
"https://kokyaku.net/abc/",
|
260
|
+
|
261
|
+
"https://kokyaku.net/color/abc/",
|
262
|
+
|
263
|
+
"https://kokyaku.net/def/",
|
264
|
+
|
265
|
+
"https://kokyaku.net/color/def/",
|
266
|
+
|
267
|
+
|
268
|
+
|
269
|
+
"https://kokyaku.net/abc/abc",
|
270
|
+
|
271
|
+
"https://kokyaku.net/def/abc",
|
272
|
+
|
273
|
+
"https://kokyaku.net/abc.def/",
|
274
|
+
|
275
|
+
"https://kokyaku.net/index.html"
|
276
|
+
|
277
|
+
]
|
278
|
+
|
279
|
+
|
280
|
+
|
281
|
+
// ルート指定
|
282
|
+
|
283
|
+
const roots = [
|
284
|
+
|
285
|
+
"https://test.jp/test/",
|
286
|
+
|
287
|
+
"https://test.jp/test2/",
|
288
|
+
|
289
|
+
"https://kokyaku.net/"
|
290
|
+
|
291
|
+
];
|
292
|
+
|
293
|
+
|
294
|
+
|
295
|
+
// 正規表現をエスケープする
|
296
|
+
|
297
|
+
const escapeRegularExpression = re => {
|
298
|
+
|
299
|
+
return re.replace(/[\^$*+?.(){[|]/g, a => `\${a}`);
|
300
|
+
|
301
|
+
};
|
302
|
+
|
303
|
+
|
304
|
+
|
305
|
+
const insertColor = source => {
|
306
|
+
|
307
|
+
const rootRe = roots
|
308
|
+
|
309
|
+
.map(a => escapeRegularExpression(a))
|
310
|
+
|
311
|
+
.join("|");
|
312
|
+
|
313
|
+
const re = new RegExp(`^(${rootRe})(.*)`);
|
314
|
+
|
315
|
+
return source.indexOf("/color/") == -1
|
316
|
+
|
317
|
+
? source.replace(re, "$1color/$2")
|
318
|
+
|
319
|
+
: source;
|
320
|
+
|
321
|
+
};
|
322
|
+
|
323
|
+
|
324
|
+
|
325
|
+
for (const url of testStrings) {
|
326
|
+
|
327
|
+
console.log(insertColor(url));
|
328
|
+
|
329
|
+
}
|
330
|
+
|
331
|
+
```
|
1
修正
test
CHANGED
@@ -30,7 +30,7 @@
|
|
30
30
|
|
31
31
|
|
32
32
|
|
33
|
-
ただし、これが単なるリンクならそのように置換すれば終わりですが、href ということは、実際にそこにアクセスした場合に置換ということですね?
|
33
|
+
ただし、これが単なるリンクならそのように置換すれば終わりですが、location.href ということは、実際にそこにアクセスした場合に置換ということですね?
|
34
34
|
|
35
35
|
その場合、置換後の https://test.jp/test/color/abc/ を更に置換して https://test.jp/test/color/color/abc/ にしてしまう可能性があるので、そのようなことの無いよう、/color/ がある場合を除かなければなりません。
|
36
36
|
|