【问题标题】:splitting up text with a regular expression in google app script (documentApp) with findText使用 findText 在谷歌应用脚​​本(documentApp)中使用正则表达式拆分文本
【发布时间】:2017-07-02 22:08:56
【问题描述】:

在谷歌文档(不是电子表格)中,我有一堵看起来像

的文字墙
 °foo bar header°foo bar bat paragraph°and another paragraph°and yet an other paragraph°and so on

我想把文本分成几段。

所以我想在正则表达式的帮助下获取° 字符之间的文本。我想使用

     var rangeElement = body.findText("°([^°]*)°");

但是该正则表达式使谷歌文档变为“服务不可用:文档”。使用像 "°.?°" 这样的正则表达式可以缓解这个问题,但不会隔离我想要的文本。

什么是可以工作的正则表达式?如何继续处理 () 中的子字符串?

【问题讨论】:

  • 尝试var rx = /°([^°]*)/g;,然后尝试while (m=rx.exec(doc.getBody().getText())) { Logger.log("Matched: " + m[1]); }
  • DocumentApp 的任何类都没有用于正则表达式、字符串或文本的方法 exec。做正则表达式的方法有findText和replaceText。
  • 错了。您可以按照我在第一条评论中展示的方式使用 JavaScript RegExp。看起来你甚至没有尝试过我的建议(从我的谷歌脚本复制)。
  • 哎呀,我试过了。 :-) 它给了我这些错误:TypeError: Cannot find function exec in object /°([^°]*)/g.
  • 编辑问题以显示您是如何尝试的。它在我的脚本中没有问题。

标签: regex google-apps-script


【解决方案1】:

要获得所有(多个)匹配项,您可以利用 JavaScript RegExpg(全局)修饰符。

var rx = /°([^°]*)/g;
while (m=rx.exec(doc.getBody().getText())) { 
    Logger.log("Matched: " + m[1]);
}

/°([^°]*)/g 是一个正则表达式文字符号(注意它周围不应有引号),其中/ 是正则表达式分隔符,°([^°]*) 是匹配° 符号和然后将除° (([^°]*)) 以外的任何 0 个或多个字符捕获到第 1 组中任意次数 (g)。

要真正匹配所有匹配项,您需要多次调用RegExp#exec 并获取组1 值(m[1])。

【讨论】:

  • 你好,是否可以将此方法用于值范围。如果有,该怎么做?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-14
相关资源
最近更新 更多