如何解决将正则表达式值与切片值连接在一起
我具有以下功能,可将B列中的值与L列中的值连接起来
function ConcatenateJS() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];
var lr = sheet.getLastRow();
var valuesB = sheet.getRange(2,2,lr,1).getValues(); //Get values for column B
var valuesL = sheet.getRange(2,12,1).getValues(); //Get values for column L
var results = []; //Create a empty array to be filled concatenated elements
//Add items to results
for(var i=0; i<lr; i++){
results[i] = [valuesB[i][0]+"-"+valuesL[i][0]];
}
//Post back to column 1 starting on row 2
sheet.getRange(2,1,1).setValues(results);
}
我只需要接受 valuesB 的前三个字母(因此不能有空格和特殊字符),并且只需接受 valuesL 的后八个字母。 我该怎么办?
解决方法
由于.getValues()
返回的对象显然可以转换为字符串,因此您可以
-
使用the
String
constructor as a function转换为常规字符串以将其转换为字符串。 -
使用正则表达式使用
String#replace
:-
/[^a-zA-Z]/g
,它将替换不是一个字母 的任何内容
-
/[^0-9]/g
,它将替换不是一个数字
-
-
致电
String#slice
,以获取所需的字符。 如果您将负索引传递给.slice()
,它将从末尾开始读取项目。
因此,您需要的一切都是:
function lettersOnly(value) {
return String(value).replace(/[^a-zA-Z]/g,"");
}
function numbersOnly(value) {
return String(value).replace(/[^0-9]/g,"");
}
function formatValues(str1,str2){
var value1 = lettersOnly(str1).slice(0,3);
var value2 = numbersOnly(str2).slice(-8);
return [value1 + "-" + value2];
}
console.log(formatValues("abcdef","0987654321"));
console.log(formatValues("a1_b -2c-d4e5f","q-1*r-2+s-3't-4-u-5_v-6 w-7,x-8.y-9(z-0"));
console.log(formatValues("ab6","xyz12345"));
console.log(formatValues("Johnny","0987654321"));
console.log(formatValues("S-Uper Nick","0987654321"));
console.log(formatValues("S4mm3r","0987654321"));
const objB1 = { toString() { return "Johnny"; } };
const objB2 = { toString() { return "S-Uper Nick"; } };
const objB3 = { toString() { return "S4mm3r"; } };
const objL = { [Symbol.toPrimitive]() { return 10987654321; } };
console.log(formatValues(objB1,objL));
console.log(formatValues(objB2,objL));
console.log(formatValues(objB3,objL));
然后可以在代码中使用:
function ConcatenateJS() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];
var lr = sheet.getLastRow();
var valuesB = sheet.getRange(2,2,lr,1).getValues(); //Get values for column B
var valuesL = sheet.getRange(2,12,1).getValues(); //Get values for column L
var results = []; //Create a empty array to be filled concatenated elements
//Add items to results
for(var i=0; i<lr; i++){
results[i] = formatValues(valuesB[i][0],valuesL[i][0]);
}
//Post back to column 1 starting on row 2
sheet.getRange(2,1,1).setValues(results);
}
function lettersOnly(svaluetr) {
return String(value).replace(/[^a-zA-Z]/g,3);
var value2 = numbersOnly(str2).slice(-8);
return [value1 + "-" + value2];
}
由于Google脚本支持现代ES6 +语法,因此您可以获得更紧凑的代码:
const lettersOnly = value => String(value).replace(/[^a-zA-Z]/g,"");
const numbersOnly = value => String(value).replace(/[^0-9]/g,"");
const formatValues = (str1,str2) => [
`${lettersOnly(str1).slice(0,3)}-${numbersOnly(str2).slice(-8)}`
];
console.log(formatValues("abcdef",objL));
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。