简体   繁体   English

如何使RegExp工作? (Google Apps脚本)

[英]How to make RegExp work? (Google Apps Script)

Trying write search function that will search for few different formats of numbers (examples: +############ , # (###) ###-##-## , ########### and etc. ) and format(replace) in one format ( +7(###)###-##-## ). 尝试写搜索功能,该功能将搜索几种不同格式的数字(例如: +############# (###) ###-##-#############等)并以一种格式( +7(###)###-##-## )格式化(替换)。

note: format means replace string with string that properly formated, but not use formating setting 注意:format表示将字符串替换为正确格式化的字符串,但不使用格式化设置

Function. 功能。 It's right now lacks of replace functionality. 现在缺少替换功能。

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')
    }
}

Logger output: 记录器输出:

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

regexp.exec(r.getValue()) returns null. regexp.exec(r.getValue())返回null。

I except get true on line 4 and 6. 除了在第4行和第6行得到真值之外,

Problem was in var regexp = RegExp ('/+\\d{11}', 'g') . 问题出在var regexp = RegExp ('/+\\d{11}', 'g') When i wrote var regexp = /\\+\\d{11}/ it starts work. 当我写var regexp = /\\+\\d{11}/它开始工作。

Thank you to ctwheels . 谢谢ctwheels He wrote regex which was finding all formats and replaced with right one. 他写了正则表达式来查找所有格式,并用正确的格式替换。

Final solution 最终解决方案

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)
  }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM