【问题标题】:RegEx to Capture All Text Before String NOT using a Lookahead for Google Apps Script正则表达式捕获字符串之前的所有文本,而不是使用 Google Apps 脚本的前瞻
【发布时间】:2019-08-07 18:35:34
【问题描述】:

由于我无法在 Google Apps 脚本中使用正向前瞻,我需要找到另一种方法来编写正则表达式。具有积极前瞻的正则表达式如下所示:

.+?(?=\nConstant Phrase)

我想在谷歌文档开头的任何一行中捕获“常量短语”(不包括“常量短语”)之前的所有文本。我希望整个正则表达式匹配是常量短语之前的文本,因为我不确定如何在 Google Apps Script for Google Docs 中引用匹配组。关于如何使用适用于 Google Docs 的方法来完成此任务的任何想法?谢谢!

Google 文档中的文字是:

Title of the Page Goes Here
National Recommendation
....rest of document

我想匹配(在这种情况下)"Title of the Page Goes Here"

在 Golang 的正则表达式测试器中看到的另一个示例。我希望 整个 匹配只是 <headline> 或任何可能在其位置上的文本。

【问题讨论】:

  • 你能提供一些示例行吗?为什么^(.*?)Constant Phrase 不起作用?
  • 它在 perl 等中运行良好,但在 Google Apps 脚本中不支持前瞻。
  • 我没有在上面的正则表达式中使用前瞻。
  • 忘记正则表达式。显示您尝试使用正则表达式的 GAS 代码。显示您的文档。 regexTester 屏幕截图有什么用途? Google 文档中的正则表达式与其他所有内容都不相同。对于初学者,如果您使用doc.replaceText(regex,text),它会使用内置的正则表达式,并且每行只测试一个,即,您不能引用两行或使用\n.. 它还使用re2 正则表达式引擎。或者,您可以使用 body.getText() 将整个文本作为字符串获取并使用 JavaScript ES5 正则表达式引擎......我可以继续。但是没有你的 GAS 代码和文件,那是没有意义的。
  • 你在用这个文件做什么?提取文本或替换或删除?你期待什么?

标签: regex google-apps-script


【解决方案1】:

希望整个正则表达式匹配为常量短语之前的文本,因为我不确定如何在 Google Apps Script for Google Docs 中引用匹配组。

RegExp.prototype.exec 返回一个捕获组数组。通过在常量短语之前您希望匹配的部分周围放置括号,您可以将它们从返回的数组中取出并忽略其余部分。使用 \s 匹配所有空格,包括换行符。

function myFunction() {
  var text = DocumentApp.getActiveDocument().getBody().getText();
  var match = /(.*)\s+National Recommendation/.exec(text)[1];
  Logger.log(match); // => "Title will go here...could be anything"
}

【讨论】:

    猜你喜欢
    • 2012-04-22
    • 2016-05-14
    • 2020-06-16
    • 2018-12-11
    • 1970-01-01
    • 2011-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多