【问题标题】:How to make RegExp work? (Google Apps Script)如何使正则表达式工作? (Google Apps 脚本)
【发布时间】:2018-01-19 19:35:06
【问题描述】:

尝试编写搜索功能,将搜索几种不同格式的数字(例如:+############# (###) ###-##-############# 等)和一种格式(+7(###)###-##-##)的格式(替换)。

注意:格式是指用格式正确的字符串替换字符串,但不使用格式设置

功能。它现在缺少替换功能。

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = SpreadsheetApp.getActiveSheet();

var history = ss.getSheetByName('sheetname');
ss.setActiveSheet(history);

for(i = 1; i <= history.getMaxRows(); i += 1) {
  var r = history.getRange('D' + i)

  var regexp = RegExp ('/+\d{11}', 'g')

  Logger.log("Value: " + r.getValue())

  if (regexp.exec(r.getValue()) !== null ) {
      Logger.log('true')
    } else {
      Logger.log('false')
    }
}

记录器输出:

Line 1: Value: +#(###)###-##-##
Line 2: false
Line 3: Value: +###########
Line 4: false
Line 5: Value: +###########
Line 6: false

regexp.exec(r.getValue()) 返回空值。

我除了在第 4 行和第 6 行得到 true。

【问题讨论】:

  • 您能否发布这些将包含的示例值/字符串及其预期输出?
  • 不确定this 是否是您要查找的内容,因为它有点不清楚
  • 我得到了带有值的谷歌电子表格,它不断变化。所以我需要正确格式化它们。我对正则表达式有点熟悉。我可以在搜索和替换正则表达式中手动编写它并且它可以工作,但我想自动化这个,所以它就像按下按钮并完成。
  • 这个正则表达式对你有用吗?
  • 它在 Google Apps 脚本环境中不起作用

标签: javascript regex google-apps-script


【解决方案1】:

问题出在var regexp = RegExp ('/+\d{11}', 'g')。当我写 var regexp = /\+\d{11}/ 它开始工作。

感谢ctwheels。他编写了正则表达式,可以找到所有格式并替换为正确的格式。

最终解决方案

for(i = 1; i <= history.getMaxRows(); i += 1) {

  var r = history.getRange('D' + i);
  var regexp = /\+?(\d{1,2}?)(?: *\()?(\d{3})(?:\) *)?(\d{3})-?(\d{2})-?(\d{2}\b)/
  var replace = '+7($2)$3-$4-$5';

  if (regexp.exec(r.getValue()) !== null ) {
    var repla = r.getValue().replace(regexp, replace)
    r.setValue(repla)
  }
}

【讨论】:

    猜你喜欢
    • 2017-07-16
    • 1970-01-01
    • 2015-04-11
    • 2013-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-30
    • 1970-01-01
    相关资源
    最近更新 更多