[英]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.