javascript - 如何使正则表达式发挥作用? (谷歌应用脚​​本)

标签 javascript regex google-apps-script

尝试编写搜索功能来搜索几种不同格式的数字(例如:+############# (###) # ##-##-############## 等)并以一种格式格式化(替换)(+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()) 返回 null。

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

最佳答案

问题出在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)
  }
}

关于javascript - 如何使正则表达式发挥作用? (谷歌应用脚​​本),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48348320/

相关文章:

google-apps-script - 在 Google Apps 脚本中设置单元格边框宽度

javascript - RequireJS 和 JavaScript API

javascript - 平铺面积估计

javascript - 本地正则表达式匹配变量未更新

regex - 是否有解决方法允许在 Mongodb 聚合管道中使用正则表达式

java - 带反斜杠转义的字符串的正则表达式

javascript - Json-server 依赖于 uuid 而不是 id

javascript - 我可以在桌面以外的所有内容上隐藏 html5 视频标签吗?

google-apps-script - 如何启用 OAuth Google 脚本,而无需每次 token 过期时都登录?

google-apps-script - 控制哪个用户在谷歌表格中运行应用程序脚本