LANG SELRCT

Apps Script Reference  (Create: Create new Spreadsheet | Create new Apps Script

Sunday, December 8, 2019

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


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



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

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

スプレッドシートA列にある複数のテキストをスライドに追加したい(Google Apps Script)

今回Google Apps Scriptでやりたいこと GoogleスプレッドシートA列にある複数の値を取得して Googleスライドに渡して 図形オブジェクトのテキストとして追加したい ① スプレッドシートのA列に値を入れておく ② Code.gsのinsertNewShape...