前提・実現したいこと
お世話になります。
皆様のお知恵をお借りしたく質問させて頂きます。
テキストボックスに入力されたテキストから、ある特定のキーワード(単語やフレーズ)を見つけ出し、それらを<span></span>で囲んだ状態で、ブラウザに出力したい。
該当キーワードがテキスト内に無ければ、何もせずそのままブラウザに出力したい。
・テキストデータは英文
・見つけたいキーワードも英語で複数ある
・キーワードは部分一致するものがある
・キーワードは固定ではなく、定期的に追加される
・キーワードの管理は昇順・降順ではなく、登録順(日付順)
発生している問題・エラーメッセージ
置換したいキーワードの一部が他のキーワードと重複している場合、置換後の文字列が意図しない結果になる。
該当のソースコード
html
1<!DOCTYPE HTML> 2<html> 3 <head> 4 <meta charset="utf-8"> 5 <title>test</title> 6 <style> 7 html, body { 8 width: 100%; 9 height: 100%; 10 } 11 body { 12 display: flex; 13 justify-content: center; 14 } 15 #before, #after { 16 width: 800px; 17 font-size: 13px; 18 line-height: 1.4; 19 margin: 10px auto; 20 height: 200px; 21 } 22 span { 23 color: #ff0000; 24 } 25 </style> 26 <script type="text/javascript"> 27 /* キーワードを赤文字に変換 */ 28 function henkan() { 29 30 /* キーワード(例) */ 31 var array1 = [ 32 /white/g, 33 /apple/g, 34 /brown/g, 35 /tomato/g, 36 /cheese/g, 37 /Cheese/g, 38 /Cheese Inc./g, 39 /* 追加日 */ 40 /Cheese Cake/g, 41 /blueberry/g, 42 /blueberry pie/g, 43 /brown 2/g, 44 /yellow/g, 45 /brown4/g, 46 /* 追加日 */ 47 /cat/g, 48 /compact/g, 49 /water/g, 50 /water server/g, 51 /yellow®/g 52 ] 53 54 var beforeStr = document.querySelector('#before').value; 55 56 for (var i=0, len=array1.length; i<len; i++) { 57 beforeStr = beforeStr.replace(array1[i], '<span>$&</span>'); 58 } 59 60 beforeStr = beforeStr.replace(/\r\n|\n|\r/g, '<br>'); 61 62 document.querySelector('#after').innerHTML = beforeStr; 63 64 } 65 66 function myReset() { 67 var after = document.querySelector('#after'); 68 after.innerHTML = ""; 69 } 70 71 </script> 72 </head> 73 74 <body> 75 <form onReset="myReset()"> 76 <textarea id="before"></textarea> 77 <p> 78 <input type="button" id="btn" value="変換" onClick="henkan()"> 79 <input type="reset" value="リセット"> 80 </p> 81 <div id="after"></div> 82 </form> 83 </body> 84</html>
試したこと
単語の終わりや半角スペースに該当する記述を追加してみたが、改善せず。
/Cheese Cake/g → /Cheese\sCake\b/g
/Cheese/gより先に/Cheese Cake/gを記述したらCheese Cakeも<span></span>で囲まれたが、キーワードは日付順で登録・管理しているため勝手に動かせず元に戻した。
補足情報(FW/ツールのバージョンなど)
開発環境:Brackets
実行環境:Google Chrome最新版
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。