Apps Scriptリファレンス: Apps Script Reference |障害・課題追跡: IssueTracker |Google Workspace: Status Dashboard - Summary

2019年12月8日日曜日

複数のつながった英語の文章を単文に分けたい(正規表現)


こういうことがやりたくて書いたコード



左のテキストエリアに以下のようなテキストを貼り付けると
右のテキストエリアに一文ずつ改行して表示される。

Practice makes the impossible possible. Strike while the iron is hot.

Nothing comes of nothing.


デモ
https://script.google.com/macros/s/AKfycbxxqRidOTAUssCiWZBr-SxBriaB80i2MkLWEECL87ZtlsPVVRun/exec


今回書いた正規表現
var pattern = /.*?(?=[.!?] ).|[^。!?\n]*.|.*$/g;



コード.gs
function doGet() {
  return HtmlService.createHtmlOutputFromFile("index");
}
意訳
この機能がやること
指定したHTMLファイルを表示する




index.html
<!DOCTYPE html>
<html>
  <head>
    <style>
      textarea {
        width: 40vw;
        height: 80vh;
      }
    </style>
  </head>
  <body>
    <textarea id="ta"></textarea>
    <textarea id="ta2"></textarea>
    <script>
      elem("ta").onkeyup = taKeyup;
      
      function elem(id) {
        return document.getElementById(id);
      }
      
      function taKeyup() {
        var taStr = elem("ta").value;
        var singleSenteceArray = splitToSingleSentece(taStr);
        console.log(singleSenteceArray);
        elem("ta2").value = singleSenteceArray
      }
      
      function splitToSingleSentece(str) {
        var pattern = /.*?(?=[.!?] ).|[^。!?\n]*.|.*$/g;
        var sentences = str.match(pattern);
        var singleSentences = '';
        for(var i = 0; i < sentences.length; i++) {
          var sentence = sentences[i].trim();
          singleSentences += sentence + '\n';
        }
        return singleSentences
      }
    </script>
  </body>
</html>




備忘録

試しながら書いた正規表現

最初はこんな感じのを書いて、試しながらやってみた(これだと全然だめ)
var pattern = /.*\. *?.|.*\! *?.|.*\。*?.|.*\! *?.|.*/g;


.!?以外でいけそうな気がしたけれど、
3.14などの小数点やA.M.などのピリオドでも改行してしまう
var pattern = /[^.!?]*./g;


Latest post

Google Classroom API でクラスの一覧を取得したい

自分が指導・参加しているクラスの名称とIDを取得するコードを試しました 下記 Code.gs では pageSize で 100 を設定していますが 必ず 100件 返ってくるとは限らないらしいです https://developers.google.com/workspace/...