質問編集履歴

1

無事解決したので修正後のコードを追加

2023/04/08 05:13

投稿

strauzer
strauzer

スコア1

test CHANGED
File without changes
test CHANGED
@@ -54,3 +54,42 @@
54
54
  }
55
55
  ```
56
56
 
57
+
58
+ ### 修正後のコード
59
+ 需要は少なさそうですが、一応今回の最終的なコードを残しておきます。
60
+ ```JavaScript
61
+ const api_url = 'スプレッドシートのAPI'; //[{"jpn0":"","eng0":"","chn0":"","jpn1":"",,,},{"jpn0":"",,,},,,]の形に変更
62
+
63
+ (async function() {
64
+ nameDB = await (await fetch(api_url)).json();
65
+ for (let i = 0; i < Object.keys(nameDB).length; i++) {
66
+ let walkerText= document.createTreeWalker(
67
+ document.body,
68
+ NodeFilter.SHOW_TEXT,function(node){
69
+ if(node.data.match(/\S/g)){ //ホワイトスペースなどの不必要な検索対象を除外し高速化
70
+ return NodeFilter.FILTER_ACCEPT;
71
+ }else{
72
+ return NodeFilter.FILTER_REJECT;
73
+ }
74
+ }
75
+ );
76
+ while(true){
77
+ tgt2Repl = walkerText.nextNode();
78
+ if(tgt2Repl === null){ //nextNode() が null の時 = 全てのノードの処理が完了した時
79
+ break;
80
+ };
81
+ for(let j = 0; j < 4; j++){
82
+ engElem = eval('nameDB[i].eng' + j); //evalは脆弱性の関係で非推奨とのこと。今回は個人的な拡張機能ということで採用
83
+ if(engElem !== ''){ //元のAPIの構造上空白の辞書があるためここで弾く
84
+ chnElem = eval('nameDB[i].chn' + j);
85
+ jpnElem = eval('nameDB[i].jpn' + j);
86
+ flElem = new RegExp(engElem + '|' + chnElem, 'g');
87
+ if(tgt2Repl.data.includes(engElem) || tgt2Repl.data.includes(chnElem)){
88
+ tgt2Repl = tgt2Repl.data.replace(flElem, jpnElem);
89
+ };
90
+ };
91
+ };
92
+ };
93
+ };
94
+ })()
95
+ ```