回答編集履歴

2

追記

2020/09/24 04:52

投稿

Zuishin
Zuishin

スコア28669

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

修正

2020/09/24 04:52

投稿

Zuishin
Zuishin

スコア28669

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